Megatest

Hex Artifact Content
Login

Artifact 18d52e02c6056e6f56f835a9b5ba3c80639b4e8f:


0000: 28 75 73 65 20 73 71 6c 69 74 65 33 20 73 72 66  (use sqlite3 srf
0010: 69 2d 31 20 70 6f 73 69 78 20 72 65 67 65 78 20  i-1 posix regex 
0020: 72 65 67 65 78 2d 63 61 73 65 20 73 72 66 69 2d  regex-case srfi-
0030: 36 39 20 64 6f 74 2d 6c 6f 63 6b 69 6e 67 20 74  69 dot-locking t
0040: 63 70 20 72 70 63 29 0a 28 69 6d 70 6f 72 74 20  cp rpc).(import 
0050: 28 70 72 65 66 69 78 20 73 71 6c 69 74 65 33 20  (prefix sqlite3 
0060: 73 71 6c 69 74 65 33 3a 29 29 0a 28 69 6d 70 6f  sqlite3:)).(impo
0070: 72 74 20 28 70 72 65 66 69 78 20 72 70 63 20 72  rt (prefix rpc r
0080: 70 63 3a 29 29 0a 0a 28 64 65 63 6c 61 72 65 20  pc:))..(declare 
0090: 28 75 6e 69 74 20 74 65 73 74 73 29 29 0a 28 64  (unit tests)).(d
00a0: 65 63 6c 61 72 65 20 28 75 73 65 73 20 64 62 29  eclare (uses db)
00b0: 29 0a 28 64 65 63 6c 61 72 65 20 28 75 73 65 73  ).(declare (uses
00c0: 20 63 6f 6d 6d 6f 6e 29 29 0a 28 64 65 63 6c 61   common)).(decla
00d0: 72 65 20 28 75 73 65 73 20 69 74 65 6d 73 29 29  re (uses items))
00e0: 0a 28 64 65 63 6c 61 72 65 20 28 75 73 65 73 20  .(declare (uses 
00f0: 72 75 6e 63 6f 6e 66 69 67 29 29 0a 0a 28 69 6e  runconfig))..(in
0100: 63 6c 75 64 65 20 22 63 6f 6d 6d 6f 6e 5f 72 65  clude "common_re
0110: 63 6f 72 64 73 2e 73 63 6d 22 29 0a 28 69 6e 63  cords.scm").(inc
0120: 6c 75 64 65 20 22 6b 65 79 5f 72 65 63 6f 72 64  lude "key_record
0130: 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75 64 65  s.scm").(include
0140: 20 22 64 62 5f 72 65 63 6f 72 64 73 2e 73 63 6d   "db_records.scm
0150: 22 29 0a 28 69 6e 63 6c 75 64 65 20 22 72 75 6e  ").(include "run
0160: 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a 28  _records.scm").(
0170: 69 6e 63 6c 75 64 65 20 22 74 65 73 74 5f 72 65  include "test_re
0180: 63 6f 72 64 73 2e 73 63 6d 22 29 0a 0a 28 64 65  cords.scm")..(de
0190: 66 69 6e 65 20 28 74 65 73 74 73 3a 72 65 67 69  fine (tests:regi
01a0: 73 74 65 72 2d 74 65 73 74 20 64 62 20 72 75 6e  ster-test db run
01b0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74  -id test-name it
01c0: 65 6d 2d 70 61 74 68 29 0a 20 20 28 6c 65 74 20  em-path).  (let 
01d0: 28 28 69 74 65 6d 2d 70 61 74 68 73 20 28 69 66  ((item-paths (if
01e0: 20 28 65 71 75 61 6c 3f 20 69 74 65 6d 2d 70 61   (equal? item-pa
01f0: 74 68 20 22 22 29 0a 09 09 09 28 6c 69 73 74 20  th "")....(list 
0200: 69 74 65 6d 2d 70 61 74 68 29 0a 09 09 09 28 6c  item-path)....(l
0210: 69 73 74 20 69 74 65 6d 2d 70 61 74 68 20 22 22  ist item-path ""
0220: 29 29 29 29 0a 20 20 20 20 28 66 6f 72 2d 65 61  )))).    (for-ea
0230: 63 68 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61  ch .     (lambda
0240: 20 28 70 74 68 29 0a 20 20 20 20 20 20 20 28 73   (pth).       (s
0250: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64  qlite3:execute d
0260: 62 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e  b "INSERT OR IGN
0270: 4f 52 45 20 49 4e 54 4f 20 74 65 73 74 73 20 28  ORE INTO tests (
0280: 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c  run_id,testname,
0290: 65 76 65 6e 74 5f 74 69 6d 65 2c 69 74 65 6d 5f  event_time,item_
02a0: 70 61 74 68 2c 73 74 61 74 65 2c 73 74 61 74 75  path,state,statu
02b0: 73 29 20 56 41 4c 55 45 53 20 28 3f 2c 3f 2c 73  s) VALUES (?,?,s
02c0: 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f  trftime('%s','no
02d0: 77 27 29 2c 3f 2c 27 4e 4f 54 5f 53 54 41 52 54  w'),?,'NOT_START
02e0: 45 44 27 2c 27 6e 2f 61 27 29 3b 22 20 0a 09 09  ED','n/a');" ...
02f0: 09 72 75 6e 2d 69 64 20 0a 09 09 09 74 65 73 74  .run-id ....test
0300: 2d 6e 61 6d 65 0a 09 09 09 70 74 68 29 29 0a 20  -name....pth)). 
0310: 20 20 20 20 69 74 65 6d 2d 70 61 74 68 73 20 29      item-paths )
0320: 29 29 0a 0a 3b 3b 20 67 65 74 20 74 68 65 20 70  ))..;; get the p
0330: 72 65 76 69 6f 75 73 20 72 65 63 6f 72 64 20 66  revious record f
0340: 6f 72 20 77 68 65 6e 20 74 68 69 73 20 74 65 73  or when this tes
0350: 74 20 77 61 73 20 72 75 6e 20 77 68 65 72 65 20  t was run where 
0360: 61 6c 6c 20 6b 65 79 73 20 6d 61 74 63 68 20 62  all keys match b
0370: 75 74 20 72 75 6e 6e 61 6d 65 0a 3b 3b 20 72 65  ut runname.;; re
0380: 74 75 72 6e 73 20 23 66 20 69 66 20 6e 6f 20 73  turns #f if no s
0390: 75 63 68 20 74 65 73 74 20 66 6f 75 6e 64 2c 20  uch test found, 
03a0: 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65  returns a single
03b0: 20 74 65 73 74 20 72 65 63 6f 72 64 20 69 66 20   test record if 
03c0: 66 6f 75 6e 64 0a 28 64 65 66 69 6e 65 20 28 74  found.(define (t
03d0: 65 73 74 3a 67 65 74 2d 70 72 65 76 69 6f 75 73  est:get-previous
03e0: 2d 74 65 73 74 2d 72 75 6e 2d 72 65 63 6f 72 64  -test-run-record
03f0: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d   db run-id test-
0400: 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a  name item-path).
0410: 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 73 20 20    (let* ((keys  
0420: 20 20 28 64 62 3a 67 65 74 2d 6b 65 79 73 20 64    (db:get-keys d
0430: 62 29 29 0a 09 20 28 73 65 6c 73 74 72 20 20 28  b)).. (selstr  (
0440: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72  string-intersper
0450: 73 65 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20  se (map (lambda 
0460: 28 78 29 28 76 65 63 74 6f 72 2d 72 65 66 20 78  (x)(vector-ref x
0470: 20 30 29 29 20 6b 65 79 73 29 20 22 2c 22 29 29   0)) keys) ","))
0480: 0a 09 20 28 71 72 79 73 74 72 20 20 28 73 74 72  .. (qrystr  (str
0490: 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20  ing-intersperse 
04a0: 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 78 29  (map (lambda (x)
04b0: 28 63 6f 6e 63 20 28 76 65 63 74 6f 72 2d 72 65  (conc (vector-re
04c0: 66 20 78 20 30 29 20 22 3d 3f 22 29 29 20 6b 65  f x 0) "=?")) ke
04d0: 79 73 29 20 22 20 41 4e 44 20 22 29 29 0a 09 20  ys) " AND ")).. 
04e0: 28 6b 65 79 76 61 6c 73 20 23 66 29 29 0a 20 20  (keyvals #f)).  
04f0: 20 20 3b 3b 20 66 69 72 73 74 20 6c 6f 6f 6b 20    ;; first look 
0500: 75 70 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  up the key value
0510: 73 20 66 72 6f 6d 20 74 68 65 20 72 75 6e 20 73  s from the run s
0520: 65 6c 65 63 74 65 64 20 62 79 20 72 75 6e 2d 69  elected by run-i
0530: 64 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66  d.    (sqlite3:f
0540: 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20  or-each-row .   
0550: 20 20 28 6c 61 6d 62 64 61 20 28 61 20 2e 20 62    (lambda (a . b
0560: 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 6b  ).       (set! k
0570: 65 79 76 61 6c 73 20 28 63 6f 6e 73 20 61 20 62  eyvals (cons a b
0580: 29 29 29 0a 20 20 20 20 20 64 62 0a 20 20 20 20  ))).     db.    
0590: 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 22   (conc "SELECT "
05a0: 20 73 65 6c 73 74 72 20 22 20 46 52 4f 4d 20 72   selstr " FROM r
05b0: 75 6e 73 20 57 48 45 52 45 20 69 64 3d 3f 20 4f  uns WHERE id=? O
05c0: 52 44 45 52 20 42 59 20 65 76 65 6e 74 5f 74 69  RDER BY event_ti
05d0: 6d 65 20 44 45 53 43 3b 22 29 20 72 75 6e 2d 69  me DESC;") run-i
05e0: 64 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20  d).    (if (not 
05f0: 6b 65 79 76 61 6c 73 29 0a 09 23 66 0a 09 28 6c  keyvals)..#f..(l
0600: 65 74 20 28 28 70 72 65 76 2d 72 75 6e 2d 69 64  et ((prev-run-id
0610: 73 20 27 28 29 29 29 0a 09 20 20 28 61 70 70 6c  s '()))..  (appl
0620: 79 20 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61  y sqlite3:for-ea
0630: 63 68 2d 72 6f 77 0a 09 09 20 28 6c 61 6d 62 64  ch-row... (lambd
0640: 61 20 28 69 64 29 0a 09 09 20 20 20 28 73 65 74  a (id)...   (set
0650: 21 20 70 72 65 76 2d 72 75 6e 2d 69 64 73 20 28  ! prev-run-ids (
0660: 63 6f 6e 73 20 69 64 20 70 72 65 76 2d 72 75 6e  cons id prev-run
0670: 2d 69 64 73 29 29 29 0a 09 09 20 64 62 0a 09 09  -ids)))... db...
0680: 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 69   (conc "SELECT i
0690: 64 20 46 52 4f 4d 20 72 75 6e 73 20 57 48 45 52  d FROM runs WHER
06a0: 45 20 22 20 71 72 79 73 74 72 20 22 20 41 4e 44  E " qrystr " AND
06b0: 20 69 64 20 21 3d 20 3f 3b 22 29 20 28 61 70 70   id != ?;") (app
06c0: 65 6e 64 20 6b 65 79 76 61 6c 73 20 28 6c 69 73  end keyvals (lis
06d0: 74 20 72 75 6e 2d 69 64 29 29 29 0a 09 20 20 3b  t run-id)))..  ;
06e0: 3b 20 66 6f 72 20 65 61 63 68 20 72 75 6e 20 73  ; for each run s
06f0: 74 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65  tarting with the
0700: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 6c 6f 6f   most recent loo
0710: 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 72  k to see if ther
0720: 65 20 69 73 20 61 20 6d 61 74 63 68 69 6e 67 20  e is a matching 
0730: 74 65 73 74 0a 09 20 20 3b 3b 20 69 66 20 66 6f  test..  ;; if fo
0740: 75 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20  und then return 
0750: 74 68 61 74 20 6d 61 74 63 68 69 6e 67 20 74 65  that matching te
0760: 73 74 20 72 65 63 6f 72 64 0a 09 20 20 28 64 65  st record..  (de
0770: 62 75 67 3a 70 72 69 6e 74 20 34 20 22 73 65 6c  bug:print 4 "sel
0780: 73 74 72 3a 20 22 20 73 65 6c 73 74 72 20 22 2c  str: " selstr ",
0790: 20 71 72 79 73 74 72 3a 20 22 20 71 72 79 73 74   qrystr: " qryst
07a0: 72 20 22 2c 20 6b 65 79 76 61 6c 73 3a 20 22 20  r ", keyvals: " 
07b0: 6b 65 79 76 61 6c 73 20 22 2c 20 70 72 65 76 69  keyvals ", previ
07c0: 6f 75 73 20 72 75 6e 20 69 64 73 20 66 6f 75 6e  ous run ids foun
07d0: 64 3a 20 22 20 70 72 65 76 2d 72 75 6e 2d 69 64  d: " prev-run-id
07e0: 73 29 0a 09 20 20 28 69 66 20 28 6e 75 6c 6c 3f  s)..  (if (null?
07f0: 20 70 72 65 76 2d 72 75 6e 2d 69 64 73 29 20 23   prev-run-ids) #
0800: 66 0a 09 20 20 20 20 20 20 28 6c 65 74 20 6c 6f  f..      (let lo
0810: 6f 70 20 28 28 68 65 64 20 28 63 61 72 20 70 72  op ((hed (car pr
0820: 65 76 2d 72 75 6e 2d 69 64 73 29 29 0a 09 09 09  ev-run-ids))....
0830: 20 28 74 61 6c 20 28 63 64 72 20 70 72 65 76 2d   (tal (cdr prev-
0840: 72 75 6e 2d 69 64 73 29 29 29 0a 09 09 28 6c 65  run-ids)))...(le
0850: 74 20 28 28 72 65 73 75 6c 74 73 20 28 64 62 3a  t ((results (db:
0860: 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75  get-tests-for-ru
0870: 6e 20 64 62 20 68 65 64 20 74 65 73 74 2d 6e 61  n db hed test-na
0880: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 27 28 29  me item-path '()
0890: 20 27 28 29 29 29 29 0a 09 09 20 20 28 64 65 62   '())))...  (deb
08a0: 75 67 3a 70 72 69 6e 74 20 34 20 22 47 6f 74 20  ug:print 4 "Got 
08b0: 74 65 73 74 73 20 66 6f 72 20 72 75 6e 2d 69 64  tests for run-id
08c0: 20 22 20 72 75 6e 2d 69 64 20 22 2c 20 74 65 73   " run-id ", tes
08d0: 74 2d 6e 61 6d 65 20 22 20 74 65 73 74 2d 6e 61  t-name " test-na
08e0: 6d 65 20 22 2c 20 69 74 65 6d 2d 70 61 74 68 20  me ", item-path 
08f0: 22 20 69 74 65 6d 2d 70 61 74 68 20 22 3a 20 22  " item-path ": "
0900: 20 72 65 73 75 6c 74 73 29 0a 09 09 20 20 28 69   results)...  (i
0910: 66 20 28 61 6e 64 20 28 6e 75 6c 6c 3f 20 72 65  f (and (null? re
0920: 73 75 6c 74 73 29 0a 09 09 09 20 20 20 28 6e 6f  sults)....   (no
0930: 74 20 28 6e 75 6c 6c 3f 20 74 61 6c 29 29 29 0a  t (null? tal))).
0940: 09 09 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 63  ..      (loop (c
0950: 61 72 20 74 61 6c 29 28 63 64 72 20 74 61 6c 29  ar tal)(cdr tal)
0960: 29 0a 09 09 20 20 20 20 20 20 28 69 66 20 28 6e  )...      (if (n
0970: 75 6c 6c 3f 20 72 65 73 75 6c 74 73 29 20 23 66  ull? results) #f
0980: 0a 09 09 09 20 20 28 63 61 72 20 72 65 73 75 6c  ....  (car resul
0990: 74 73 29 29 29 29 29 29 29 29 29 29 0a 20 20 20  ts)))))))))).   
09a0: 20 0a 3b 3b 20 67 65 74 20 74 68 65 20 70 72 65   .;; get the pre
09b0: 76 69 6f 75 73 20 72 65 63 6f 72 64 73 20 66 6f  vious records fo
09c0: 72 20 77 68 65 6e 20 74 68 65 73 65 20 74 65 73  r when these tes
09d0: 74 73 20 77 65 72 65 20 72 75 6e 20 77 68 65 72  ts were run wher
09e0: 65 20 61 6c 6c 20 6b 65 79 73 20 6d 61 74 63 68  e all keys match
09f0: 20 62 75 74 20 72 75 6e 6e 61 6d 65 0a 3b 3b 20   but runname.;; 
0a00: 4e 42 2f 2f 20 4d 65 72 67 65 20 74 68 69 73 20  NB// Merge this 
0a10: 77 69 74 68 20 74 65 73 74 3a 67 65 74 2d 70 72  with test:get-pr
0a20: 65 76 69 6f 75 73 2d 74 65 73 74 2d 72 75 6e 2d  evious-test-run-
0a30: 72 65 63 6f 72 64 73 3f 20 54 68 69 73 20 6f 6e  records? This on
0a40: 65 20 6c 6f 6f 6b 73 20 66 6f 72 20 61 6c 6c 20  e looks for all 
0a50: 6d 61 74 63 68 69 6e 67 20 74 65 73 74 73 0a 3b  matching tests.;
0a60: 3b 20 63 61 6e 20 75 73 65 20 77 69 6c 64 63 61  ; can use wildca
0a70: 72 64 73 2e 20 0a 28 64 65 66 69 6e 65 20 28 74  rds. .(define (t
0a80: 65 73 74 3a 67 65 74 2d 6d 61 74 63 68 69 6e 67  est:get-matching
0a90: 2d 70 72 65 76 69 6f 75 73 2d 74 65 73 74 2d 72  -previous-test-r
0aa0: 75 6e 2d 72 65 63 6f 72 64 73 20 64 62 20 72 75  un-records db ru
0ab0: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69  n-id test-name i
0ac0: 74 65 6d 2d 70 61 74 68 29 0a 20 20 28 6c 65 74  tem-path).  (let
0ad0: 2a 20 28 28 6b 65 79 73 20 20 20 20 28 64 62 3a  * ((keys    (db:
0ae0: 67 65 74 2d 6b 65 79 73 20 64 62 29 29 0a 09 20  get-keys db)).. 
0af0: 28 73 65 6c 73 74 72 20 20 28 73 74 72 69 6e 67  (selstr  (string
0b00: 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d 61  -intersperse (ma
0b10: 70 20 28 6c 61 6d 62 64 61 20 28 78 29 28 76 65  p (lambda (x)(ve
0b20: 63 74 6f 72 2d 72 65 66 20 78 20 30 29 29 20 6b  ctor-ref x 0)) k
0b30: 65 79 73 29 20 22 2c 22 29 29 0a 09 20 28 71 72  eys) ",")).. (qr
0b40: 79 73 74 72 20 20 28 73 74 72 69 6e 67 2d 69 6e  ystr  (string-in
0b50: 74 65 72 73 70 65 72 73 65 20 28 6d 61 70 20 28  tersperse (map (
0b60: 6c 61 6d 62 64 61 20 28 78 29 28 63 6f 6e 63 20  lambda (x)(conc 
0b70: 28 76 65 63 74 6f 72 2d 72 65 66 20 78 20 30 29  (vector-ref x 0)
0b80: 20 22 3d 3f 22 29 29 20 6b 65 79 73 29 20 22 20   "=?")) keys) " 
0b90: 41 4e 44 20 22 29 29 0a 09 20 28 6b 65 79 76 61  AND ")).. (keyva
0ba0: 6c 73 20 23 66 29 0a 09 20 28 74 65 73 74 73 2d  ls #f).. (tests-
0bb0: 68 61 73 68 20 28 6d 61 6b 65 2d 68 61 73 68 2d  hash (make-hash-
0bc0: 74 61 62 6c 65 29 29 29 0a 20 20 20 20 3b 3b 20  table))).    ;; 
0bd0: 66 69 72 73 74 20 6c 6f 6f 6b 20 75 70 20 74 68  first look up th
0be0: 65 20 6b 65 79 20 76 61 6c 75 65 73 20 66 72 6f  e key values fro
0bf0: 6d 20 74 68 65 20 72 75 6e 20 73 65 6c 65 63 74  m the run select
0c00: 65 64 20 62 79 20 72 75 6e 2d 69 64 0a 20 20 20  ed by run-id.   
0c10: 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61   (sqlite3:for-ea
0c20: 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c 61  ch-row .     (la
0c30: 6d 62 64 61 20 28 61 20 2e 20 62 29 0a 20 20 20  mbda (a . b).   
0c40: 20 20 20 20 28 73 65 74 21 20 6b 65 79 76 61 6c      (set! keyval
0c50: 73 20 28 63 6f 6e 73 20 61 20 62 29 29 29 0a 20  s (cons a b))). 
0c60: 20 20 20 20 64 62 0a 20 20 20 20 20 28 63 6f 6e      db.     (con
0c70: 63 20 22 53 45 4c 45 43 54 20 22 20 73 65 6c 73  c "SELECT " sels
0c80: 74 72 20 22 20 46 52 4f 4d 20 72 75 6e 73 20 57  tr " FROM runs W
0c90: 48 45 52 45 20 69 64 3d 3f 20 4f 52 44 45 52 20  HERE id=? ORDER 
0ca0: 42 59 20 65 76 65 6e 74 5f 74 69 6d 65 20 44 45  BY event_time DE
0cb0: 53 43 3b 22 29 20 72 75 6e 2d 69 64 29 0a 20 20  SC;") run-id).  
0cc0: 20 20 28 69 66 20 28 6e 6f 74 20 6b 65 79 76 61    (if (not keyva
0cd0: 6c 73 29 0a 09 27 28 29 0a 09 28 6c 65 74 20 28  ls)..'()..(let (
0ce0: 28 70 72 65 76 2d 72 75 6e 2d 69 64 73 20 27 28  (prev-run-ids '(
0cf0: 29 29 29 0a 09 20 20 28 61 70 70 6c 79 20 73 71  )))..  (apply sq
0d00: 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72  lite3:for-each-r
0d10: 6f 77 0a 09 09 20 28 6c 61 6d 62 64 61 20 28 69  ow... (lambda (i
0d20: 64 29 0a 09 09 20 20 20 28 73 65 74 21 20 70 72  d)...   (set! pr
0d30: 65 76 2d 72 75 6e 2d 69 64 73 20 28 63 6f 6e 73  ev-run-ids (cons
0d40: 20 69 64 20 70 72 65 76 2d 72 75 6e 2d 69 64 73   id prev-run-ids
0d50: 29 29 29 0a 09 09 20 64 62 0a 09 09 20 28 63 6f  )))... db... (co
0d60: 6e 63 20 22 53 45 4c 45 43 54 20 69 64 20 46 52  nc "SELECT id FR
0d70: 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 20 22 20  OM runs WHERE " 
0d80: 71 72 79 73 74 72 20 22 20 41 4e 44 20 69 64 20  qrystr " AND id 
0d90: 21 3d 20 3f 3b 22 29 20 28 61 70 70 65 6e 64 20  != ?;") (append 
0da0: 6b 65 79 76 61 6c 73 20 28 6c 69 73 74 20 72 75  keyvals (list ru
0db0: 6e 2d 69 64 29 29 29 0a 09 20 20 3b 3b 20 63 6f  n-id)))..  ;; co
0dc0: 6c 6c 65 63 74 20 61 6c 6c 20 6d 61 74 63 68 69  llect all matchi
0dd0: 6e 67 20 74 65 73 74 73 20 66 6f 72 20 74 68 65  ng tests for the
0de0: 20 72 75 6e 73 20 74 68 65 6e 0a 09 20 20 3b 3b   runs then..  ;;
0df0: 20 65 78 74 72 61 63 74 20 74 68 65 20 6d 6f 73   extract the mos
0e00: 74 20 72 65 63 65 6e 74 20 74 65 73 74 20 61 6e  t recent test an
0e10: 64 20 72 65 74 75 72 6e 20 74 68 61 74 2e 0a 09  d return that...
0e20: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34    (debug:print 4
0e30: 20 22 73 65 6c 73 74 72 3a 20 22 20 73 65 6c 73   "selstr: " sels
0e40: 74 72 20 22 2c 20 71 72 79 73 74 72 3a 20 22 20  tr ", qrystr: " 
0e50: 71 72 79 73 74 72 20 22 2c 20 6b 65 79 76 61 6c  qrystr ", keyval
0e60: 73 3a 20 22 20 6b 65 79 76 61 6c 73 20 0a 09 09  s: " keyvals ...
0e70: 20 20 20 20 20 20 20 22 2c 20 70 72 65 76 69 6f         ", previo
0e80: 75 73 20 72 75 6e 20 69 64 73 20 66 6f 75 6e 64  us run ids found
0e90: 3a 20 22 20 70 72 65 76 2d 72 75 6e 2d 69 64 73  : " prev-run-ids
0ea0: 29 0a 09 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20  )..  (if (null? 
0eb0: 70 72 65 76 2d 72 75 6e 2d 69 64 73 29 20 27 28  prev-run-ids) '(
0ec0: 29 20 20 3b 3b 20 6e 6f 20 70 72 65 76 69 6f 75  )  ;; no previou
0ed0: 73 20 72 75 6e 73 3f 20 72 65 74 75 72 6e 20 6e  s runs? return n
0ee0: 75 6c 6c 0a 09 20 20 20 20 20 20 28 6c 65 74 20  ull..      (let 
0ef0: 6c 6f 6f 70 20 28 28 68 65 64 20 28 63 61 72 20  loop ((hed (car 
0f00: 70 72 65 76 2d 72 75 6e 2d 69 64 73 29 29 0a 09  prev-run-ids))..
0f10: 09 09 20 28 74 61 6c 20 28 63 64 72 20 70 72 65  .. (tal (cdr pre
0f20: 76 2d 72 75 6e 2d 69 64 73 29 29 29 0a 09 09 28  v-run-ids)))...(
0f30: 6c 65 74 20 28 28 72 65 73 75 6c 74 73 20 28 72  let ((results (r
0f40: 64 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72  db:get-tests-for
0f50: 2d 72 75 6e 20 64 62 20 68 65 64 20 74 65 73 74  -run db hed test
0f60: 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20  -name item-path 
0f70: 27 28 29 20 27 28 29 29 29 29 0a 09 09 20 20 28  '() '())))...  (
0f80: 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 47  debug:print 4 "G
0f90: 6f 74 20 74 65 73 74 73 20 66 6f 72 20 72 75 6e  ot tests for run
0fa0: 2d 69 64 20 22 20 72 75 6e 2d 69 64 20 22 2c 20  -id " run-id ", 
0fb0: 74 65 73 74 2d 6e 61 6d 65 20 22 20 74 65 73 74  test-name " test
0fc0: 2d 6e 61 6d 65 20 0a 09 09 09 20 20 20 20 20 20  -name ....      
0fd0: 20 22 2c 20 69 74 65 6d 2d 70 61 74 68 20 22 20   ", item-path " 
0fe0: 69 74 65 6d 2d 70 61 74 68 20 22 20 72 65 73 75  item-path " resu
0ff0: 6c 74 73 3a 20 22 20 28 69 6e 74 65 72 73 70 65  lts: " (interspe
1000: 72 73 65 20 72 65 73 75 6c 74 73 20 22 5c 6e 22  rse results "\n"
1010: 29 29 0a 09 09 20 20 3b 3b 20 4b 65 65 70 20 6f  ))...  ;; Keep o
1020: 6e 6c 79 20 74 68 65 20 79 6f 75 6e 67 65 73 74  nly the youngest
1030: 20 6f 66 20 61 6e 79 20 74 65 73 74 2f 69 74 65   of any test/ite
1040: 6d 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 09 09  m combination...
1050: 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 09 09 20    (for-each ... 
1060: 20 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 64    (lambda (testd
1070: 61 74 29 0a 09 09 20 20 20 20 20 28 6c 65 74 2a  at)...     (let*
1080: 20 28 28 66 75 6c 6c 2d 74 65 73 74 6e 61 6d 65   ((full-testname
1090: 20 28 63 6f 6e 63 20 28 64 62 3a 74 65 73 74 2d   (conc (db:test-
10a0: 67 65 74 2d 74 65 73 74 6e 61 6d 65 20 74 65 73  get-testname tes
10b0: 74 64 61 74 29 20 22 2f 22 20 28 64 62 3a 74 65  tdat) "/" (db:te
10c0: 73 74 2d 67 65 74 2d 69 74 65 6d 2d 70 61 74 68  st-get-item-path
10d0: 20 74 65 73 74 64 61 74 29 29 29 0a 09 09 09 20   testdat))).... 
10e0: 20 20 20 28 73 74 6f 72 65 64 2d 74 65 73 74 20     (stored-test 
10f0: 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65    (hash-table-re
1100: 66 2f 64 65 66 61 75 6c 74 20 74 65 73 74 73 2d  f/default tests-
1110: 68 61 73 68 20 66 75 6c 6c 2d 74 65 73 74 6e 61  hash full-testna
1120: 6d 65 20 23 66 29 29 29 0a 09 09 20 20 20 20 20  me #f)))...     
1130: 20 20 28 69 66 20 28 6f 72 20 28 6e 6f 74 20 73    (if (or (not s
1140: 74 6f 72 65 64 2d 74 65 73 74 29 0a 09 09 09 20  tored-test).... 
1150: 20 20 20 20 20 20 28 61 6e 64 20 73 74 6f 72 65        (and store
1160: 64 2d 74 65 73 74 0a 09 09 09 09 20 20 20 20 28  d-test.....    (
1170: 3e 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 65  > (db:test-get-e
1180: 76 65 6e 74 5f 74 69 6d 65 20 74 65 73 74 64 61  vent_time testda
1190: 74 29 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 65  t)(db:test-get-e
11a0: 76 65 6e 74 5f 74 69 6d 65 20 73 74 6f 72 65 64  vent_time stored
11b0: 2d 74 65 73 74 29 29 29 29 0a 09 09 09 20 20 20  -test))))....   
11c0: 3b 3b 20 74 68 69 73 20 74 65 73 74 20 69 73 20  ;; this test is 
11d0: 79 6f 75 6e 67 65 72 2c 20 73 74 6f 72 65 20 69  younger, store i
11e0: 74 20 69 6e 20 74 68 65 20 68 61 73 68 0a 09 09  t in the hash...
11f0: 09 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d  .   (hash-table-
1200: 73 65 74 21 20 74 65 73 74 73 2d 68 61 73 68 20  set! tests-hash 
1210: 66 75 6c 6c 2d 74 65 73 74 6e 61 6d 65 20 74 65  full-testname te
1220: 73 74 64 61 74 29 29 29 29 0a 09 09 20 20 20 72  stdat))))...   r
1230: 65 73 75 6c 74 73 29 0a 09 09 20 20 28 69 66 20  esults)...  (if 
1240: 28 6e 75 6c 6c 3f 20 74 61 6c 29 0a 09 09 20 20  (null? tal)...  
1250: 20 20 20 20 28 6d 61 70 20 63 64 72 20 28 68 61      (map cdr (ha
1260: 73 68 2d 74 61 62 6c 65 2d 3e 61 6c 69 73 74 20  sh-table->alist 
1270: 74 65 73 74 73 2d 68 61 73 68 29 29 20 3b 3b 20  tests-hash)) ;; 
1280: 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66  return a list of
1290: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
12a0: 20 74 65 73 74 73 0a 09 09 20 20 20 20 20 20 28   tests...      (
12b0: 6c 6f 6f 70 20 28 63 61 72 20 74 61 6c 29 28 63  loop (car tal)(c
12c0: 64 72 20 74 61 6c 29 29 29 29 29 29 29 29 29 29  dr tal))))))))))
12d0: 0a 0a 3b 3b 20 0a 28 64 65 66 69 6e 65 20 28 74  ..;; .(define (t
12e0: 65 73 74 2d 73 65 74 2d 73 74 61 74 75 73 21 20  est-set-status! 
12f0: 64 62 20 74 65 73 74 2d 69 64 20 73 74 61 74 65  db test-id state
1300: 20 73 74 61 74 75 73 20 63 6f 6d 6d 65 6e 74 20   status comment 
1310: 64 61 74 29 0a 20 20 28 6c 65 74 2a 20 28 28 72  dat).  (let* ((r
1320: 65 61 6c 2d 73 74 61 74 75 73 20 73 74 61 74 75  eal-status statu
1330: 73 29 0a 09 20 28 6f 74 68 65 72 64 61 74 20 20  s).. (otherdat  
1340: 20 20 28 69 66 20 64 61 74 20 64 61 74 20 28 6d    (if dat dat (m
1350: 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 29  ake-hash-table))
1360: 29 0a 09 20 28 74 65 73 74 64 61 74 20 20 20 20  ).. (testdat    
1370: 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 64 61   (db:get-test-da
1380: 74 61 2d 62 79 2d 69 64 20 64 62 20 74 65 73 74  ta-by-id db test
1390: 2d 69 64 29 29 0a 09 20 28 72 75 6e 2d 69 64 20  -id)).. (run-id 
13a0: 20 20 20 20 20 28 64 62 3a 74 65 73 74 2d 67 65       (db:test-ge
13b0: 74 2d 72 75 6e 5f 69 64 20 74 65 73 74 64 61 74  t-run_id testdat
13c0: 29 29 0a 09 20 28 74 65 73 74 2d 6e 61 6d 65 20  )).. (test-name 
13d0: 20 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 74    (db:test-get-t
13e0: 65 73 74 6e 61 6d 65 20 20 20 74 65 73 74 64 61  estname   testda
13f0: 74 29 29 0a 09 20 28 69 74 65 6d 2d 70 61 74 68  t)).. (item-path
1400: 20 20 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d     (db:test-get-
1410: 69 74 65 6d 2d 70 61 74 68 20 74 65 73 74 64 61  item-path testda
1420: 74 29 29 0a 09 20 3b 3b 20 62 65 66 6f 72 65 20  t)).. ;; before 
1430: 70 72 6f 63 65 65 64 69 6e 67 20 77 65 20 6d 75  proceeding we mu
1440: 73 74 20 66 69 6e 64 20 6f 75 74 20 69 66 20 74  st find out if t
1450: 68 65 20 70 72 65 76 69 6f 75 73 20 74 65 73 74  he previous test
1460: 20 28 77 68 65 72 65 20 61 6c 6c 20 6b 65 79 73   (where all keys
1470: 20 6d 61 74 63 68 65 64 20 65 78 63 65 70 74 20   matched except 
1480: 72 75 6e 6e 61 6d 65 29 0a 09 20 3b 3b 20 77 61  runname).. ;; wa
1490: 73 20 57 41 49 56 45 44 20 69 66 20 74 68 69 73  s WAIVED if this
14a0: 20 74 65 73 74 20 69 73 20 46 41 49 4c 0a 09 20   test is FAIL.. 
14b0: 28 77 61 69 76 65 64 20 20 20 28 69 66 20 28 65  (waived   (if (e
14c0: 71 75 61 6c 3f 20 73 74 61 74 75 73 20 22 46 41  qual? status "FA
14d0: 49 4c 22 29 0a 09 09 20 20 20 20 20 20 20 28 6c  IL")...       (l
14e0: 65 74 20 28 28 70 72 65 76 2d 74 65 73 74 20 28  et ((prev-test (
14f0: 74 65 73 74 3a 67 65 74 2d 70 72 65 76 69 6f 75  test:get-previou
1500: 73 2d 74 65 73 74 2d 72 75 6e 2d 72 65 63 6f 72  s-test-run-recor
1510: 64 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74  d db run-id test
1520: 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29  -name item-path)
1530: 29 29 0a 09 09 09 20 28 69 66 20 70 72 65 76 2d  )).... (if prev-
1540: 74 65 73 74 20 3b 3b 20 74 72 75 65 20 69 66 20  test ;; true if 
1550: 77 65 20 66 6f 75 6e 64 20 61 20 70 72 65 76 69  we found a previ
1560: 6f 75 73 20 74 65 73 74 20 69 6e 20 74 68 69 73  ous test in this
1570: 20 72 75 6e 20 73 65 72 69 65 73 0a 09 09 09 20   run series.... 
1580: 20 20 20 20 28 6c 65 74 20 28 28 70 72 65 76 2d      (let ((prev-
1590: 73 74 61 74 75 73 20 28 64 62 3a 74 65 73 74 2d  status (db:test-
15a0: 67 65 74 2d 73 74 61 74 75 73 20 20 20 70 72 65  get-status   pre
15b0: 76 2d 74 65 73 74 29 29 0a 09 09 09 09 20 20 20  v-test)).....   
15c0: 28 70 72 65 76 2d 73 74 61 74 65 20 20 28 64 62  (prev-state  (db
15d0: 3a 74 65 73 74 2d 67 65 74 2d 73 74 61 74 65 20  :test-get-state 
15e0: 20 20 20 70 72 65 76 2d 74 65 73 74 29 29 0a 09     prev-test))..
15f0: 09 09 09 20 20 20 28 70 72 65 76 2d 63 6f 6d 6d  ...   (prev-comm
1600: 65 6e 74 20 28 64 62 3a 74 65 73 74 2d 67 65 74  ent (db:test-get
1610: 2d 63 6f 6d 6d 65 6e 74 20 70 72 65 76 2d 74 65  -comment prev-te
1620: 73 74 29 29 29 0a 09 09 09 20 20 20 20 20 20 20  st)))....       
1630: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22  (debug:print 4 "
1640: 70 72 65 76 2d 73 74 61 74 75 73 20 22 20 70 72  prev-status " pr
1650: 65 76 2d 73 74 61 74 75 73 20 22 2c 20 70 72 65  ev-status ", pre
1660: 76 2d 73 74 61 74 65 20 22 20 70 72 65 76 2d 73  v-state " prev-s
1670: 74 61 74 65 20 22 2c 20 70 72 65 76 2d 63 6f 6d  tate ", prev-com
1680: 6d 65 6e 74 20 22 20 70 72 65 76 2d 63 6f 6d 6d  ment " prev-comm
1690: 65 6e 74 29 0a 09 09 09 20 20 20 20 20 20 20 28  ent)....       (
16a0: 69 66 20 28 61 6e 64 20 28 65 71 75 61 6c 3f 20  if (and (equal? 
16b0: 70 72 65 76 2d 73 74 61 74 65 20 20 22 43 4f 4d  prev-state  "COM
16c0: 50 4c 45 54 45 44 22 29 0a 09 09 09 09 09 28 65  PLETED")......(e
16d0: 71 75 61 6c 3f 20 70 72 65 76 2d 73 74 61 74 75  qual? prev-statu
16e0: 73 20 22 57 41 49 56 45 44 22 29 29 0a 09 09 09  s "WAIVED"))....
16f0: 09 20 20 20 70 72 65 76 2d 63 6f 6d 6d 65 6e 74  .   prev-comment
1700: 20 3b 3b 20 77 61 69 76 65 64 20 69 73 20 65 69   ;; waived is ei
1710: 74 68 65 72 20 74 68 65 20 63 6f 6d 6d 65 6e 74  ther the comment
1720: 20 6f 72 20 23 66 0a 09 09 09 09 20 20 20 23 66   or #f.....   #f
1730: 29 29 0a 09 09 09 20 20 20 20 20 23 66 29 29 0a  ))....     #f)).
1740: 09 09 20 20 20 20 20 20 20 23 66 29 29 29 0a 20  ..       #f))). 
1750: 20 20 20 28 69 66 20 77 61 69 76 65 64 20 28 73     (if waived (s
1760: 65 74 21 20 72 65 61 6c 2d 73 74 61 74 75 73 20  et! real-status 
1770: 22 57 41 49 56 45 44 22 29 29 0a 20 20 20 20 28  "WAIVED")).    (
1780: 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 72  debug:print 4 "r
1790: 65 61 6c 2d 73 74 61 74 75 73 20 22 20 72 65 61  eal-status " rea
17a0: 6c 2d 73 74 61 74 75 73 20 22 2c 20 77 61 69 76  l-status ", waiv
17b0: 65 64 20 22 20 77 61 69 76 65 64 20 22 2c 20 73  ed " waived ", s
17c0: 74 61 74 75 73 20 22 20 73 74 61 74 75 73 29 0a  tatus " status).
17d0: 0a 20 20 20 20 3b 3b 20 75 70 64 61 74 65 20 74  .    ;; update t
17e0: 68 65 20 70 72 69 6d 61 72 79 20 72 65 63 6f 72  he primary recor
17f0: 64 20 49 46 20 73 74 61 74 65 20 41 4e 44 20 73  d IF state AND s
1800: 74 61 74 75 73 20 61 72 65 20 64 65 66 69 6e 65  tatus are define
1810: 64 0a 20 20 20 20 28 69 66 20 28 61 6e 64 20 73  d.    (if (and s
1820: 74 61 74 65 20 73 74 61 74 75 73 29 0a 09 28 72  tate status)..(r
1830: 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74  db:test-set-stat
1840: 65 2d 73 74 61 74 75 73 2d 62 79 2d 72 75 6e 2d  e-status-by-run-
1850: 69 64 2d 74 65 73 74 6e 61 6d 65 20 64 62 20 72  id-testname db r
1860: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20  un-id test-name 
1870: 69 74 65 6d 2d 70 61 74 68 20 72 65 61 6c 2d 73  item-path real-s
1880: 74 61 74 75 73 20 73 74 61 74 65 29 29 0a 0a 20  tatus state)).. 
1890: 20 20 20 3b 3b 20 69 66 20 73 74 61 74 75 73 20     ;; if status 
18a0: 69 73 20 22 41 55 54 4f 22 20 74 68 65 6e 20 63  is "AUTO" then c
18b0: 61 6c 6c 20 72 6f 6c 6c 75 70 20 28 6e 6f 74 65  all rollup (note
18c0: 2c 20 74 68 69 73 20 6f 6e 65 20 6d 6f 64 69 66  , this one modif
18d0: 69 65 73 20 64 61 74 61 20 69 6e 20 74 65 73 74  ies data in test
18e0: 0a 20 20 20 20 3b 3b 20 72 75 6e 20 61 72 65 61  .    ;; run area
18f0: 2c 20 64 6f 20 6e 6f 74 20 72 70 63 20 69 74 20  , do not rpc it 
1900: 28 79 65 74 29 0a 20 20 20 20 28 69 66 20 28 61  (yet).    (if (a
1910: 6e 64 20 74 65 73 74 2d 69 64 20 73 74 61 74 65  nd test-id state
1920: 20 73 74 61 74 75 73 20 28 65 71 75 61 6c 3f 20   status (equal? 
1930: 73 74 61 74 75 73 20 22 41 55 54 4f 22 29 29 20  status "AUTO")) 
1940: 0a 09 28 64 62 3a 74 65 73 74 2d 64 61 74 61 2d  ..(db:test-data-
1950: 72 6f 6c 6c 75 70 20 64 62 20 74 65 73 74 2d 69  rollup db test-i
1960: 64 20 73 74 61 74 75 73 29 29 0a 0a 20 20 20 20  d status))..    
1970: 3b 3b 20 61 64 64 20 6d 65 74 61 64 61 74 61 20  ;; add metadata 
1980: 28 6e 65 65 64 20 74 6f 20 64 6f 20 74 68 69 73  (need to do this
1990: 20 77 61 79 20 74 6f 20 61 76 6f 69 64 20 53 51   way to avoid SQ
19a0: 4c 20 69 6e 6a 65 63 74 69 6f 6e 20 69 73 73 75  L injection issu
19b0: 65 73 29 0a 0a 20 20 20 20 3b 3b 20 3a 66 69 72  es)..    ;; :fir
19c0: 73 74 5f 65 72 72 0a 20 20 20 20 3b 3b 20 28 6c  st_err.    ;; (l
19d0: 65 74 20 28 28 76 61 6c 20 28 68 61 73 68 2d 74  et ((val (hash-t
19e0: 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74  able-ref/default
19f0: 20 6f 74 68 65 72 64 61 74 20 22 3a 66 69 72 73   otherdat ":firs
1a00: 74 5f 65 72 72 22 20 23 66 29 29 29 0a 20 20 20  t_err" #f))).   
1a10: 20 3b 3b 20 20 20 28 69 66 20 76 61 6c 0a 20 20   ;;   (if val.  
1a20: 20 20 3b 3b 20 20 20 20 20 20 20 28 73 71 6c 69    ;;       (sqli
1a30: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22  te3:execute db "
1a40: 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 54  UPDATE tests SET
1a50: 20 66 69 72 73 74 5f 65 72 72 3d 3f 20 57 48 45   first_err=? WHE
1a60: 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20  RE run_id=? AND 
1a70: 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69  testname=? AND i
1a80: 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 20 76 61 6c  tem_path=?;" val
1a90: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d   run-id test-nam
1aa0: 65 20 69 74 65 6d 2d 70 61 74 68 29 29 29 0a 20  e item-path))). 
1ab0: 20 20 20 3b 3b 20 0a 20 20 20 20 3b 3b 20 3b 3b     ;; .    ;; ;;
1ac0: 20 3a 66 69 72 73 74 5f 77 61 72 6e 0a 20 20 20   :first_warn.   
1ad0: 20 3b 3b 20 28 6c 65 74 20 28 28 76 61 6c 20 28   ;; (let ((val (
1ae0: 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64  hash-table-ref/d
1af0: 65 66 61 75 6c 74 20 6f 74 68 65 72 64 61 74 20  efault otherdat 
1b00: 22 3a 66 69 72 73 74 5f 77 61 72 6e 22 20 23 66  ":first_warn" #f
1b10: 29 29 29 0a 20 20 20 20 3b 3b 20 20 20 28 69 66  ))).    ;;   (if
1b20: 20 76 61 6c 0a 20 20 20 20 3b 3b 20 20 20 20 20   val.    ;;     
1b30: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75    (sqlite3:execu
1b40: 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 65  te db "UPDATE te
1b50: 73 74 73 20 53 45 54 20 66 69 72 73 74 5f 77 61  sts SET first_wa
1b60: 72 6e 3d 3f 20 57 48 45 52 45 20 72 75 6e 5f 69  rn=? WHERE run_i
1b70: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65  d=? AND testname
1b80: 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68  =? AND item_path
1b90: 3d 3f 3b 22 20 76 61 6c 20 72 75 6e 2d 69 64 20  =?;" val run-id 
1ba0: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70  test-name item-p
1bb0: 61 74 68 29 29 29 0a 0a 20 20 20 20 28 6c 65 74  ath)))..    (let
1bc0: 20 28 28 63 61 74 65 67 6f 72 79 20 28 68 61 73   ((category (has
1bd0: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61  h-table-ref/defa
1be0: 75 6c 74 20 6f 74 68 65 72 64 61 74 20 22 3a 63  ult otherdat ":c
1bf0: 61 74 65 67 6f 72 79 22 20 22 22 29 29 0a 09 20  ategory" "")).. 
1c00: 20 28 76 61 72 69 61 62 6c 65 20 28 68 61 73 68   (variable (hash
1c10: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75  -table-ref/defau
1c20: 6c 74 20 6f 74 68 65 72 64 61 74 20 22 3a 76 61  lt otherdat ":va
1c30: 72 69 61 62 6c 65 22 20 22 22 29 29 0a 09 20 20  riable" ""))..  
1c40: 28 76 61 6c 75 65 20 20 20 20 28 68 61 73 68 2d  (value    (hash-
1c50: 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c  table-ref/defaul
1c60: 74 20 6f 74 68 65 72 64 61 74 20 22 3a 76 61 6c  t otherdat ":val
1c70: 75 65 22 20 20 20 20 23 66 29 29 0a 09 20 20 28  ue"    #f))..  (
1c80: 65 78 70 65 63 74 65 64 20 28 68 61 73 68 2d 74  expected (hash-t
1c90: 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74  able-ref/default
1ca0: 20 6f 74 68 65 72 64 61 74 20 22 3a 65 78 70 65   otherdat ":expe
1cb0: 63 74 65 64 22 20 23 66 29 29 0a 09 20 20 28 74  cted" #f))..  (t
1cc0: 6f 6c 20 20 20 20 20 20 28 68 61 73 68 2d 74 61  ol      (hash-ta
1cd0: 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20  ble-ref/default 
1ce0: 6f 74 68 65 72 64 61 74 20 22 3a 74 6f 6c 22 20  otherdat ":tol" 
1cf0: 20 20 20 20 20 23 66 29 29 0a 09 20 20 28 75 6e       #f))..  (un
1d00: 69 74 73 20 20 20 20 28 68 61 73 68 2d 74 61 62  its    (hash-tab
1d10: 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 6f  le-ref/default o
1d20: 74 68 65 72 64 61 74 20 22 3a 75 6e 69 74 73 22  therdat ":units"
1d30: 20 20 20 20 22 22 29 29 0a 09 20 20 28 74 79 70      ""))..  (typ
1d40: 65 20 20 20 20 20 28 68 61 73 68 2d 74 61 62 6c  e     (hash-tabl
1d50: 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 6f 74  e-ref/default ot
1d60: 68 65 72 64 61 74 20 22 3a 74 79 70 65 22 20 20  herdat ":type"  
1d70: 20 20 20 22 22 29 29 0a 09 20 20 28 64 63 6f 6d     ""))..  (dcom
1d80: 6d 65 6e 74 20 28 68 61 73 68 2d 74 61 62 6c 65  ment (hash-table
1d90: 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 6f 74 68  -ref/default oth
1da0: 65 72 64 61 74 20 22 3a 63 6f 6d 6d 65 6e 74 22  erdat ":comment"
1db0: 20 20 22 22 29 29 29 0a 20 20 20 20 20 20 28 64    ""))).      (d
1dc0: 65 62 75 67 3a 70 72 69 6e 74 20 34 20 0a 09 09  ebug:print 4 ...
1dd0: 20 20 20 22 63 61 74 65 67 6f 72 79 3a 20 22 20     "category: " 
1de0: 63 61 74 65 67 6f 72 79 20 22 2c 20 76 61 72 69  category ", vari
1df0: 61 62 6c 65 3a 20 22 20 76 61 72 69 61 62 6c 65  able: " variable
1e00: 20 22 2c 20 76 61 6c 75 65 3a 20 22 20 76 61 6c   ", value: " val
1e10: 75 65 0a 09 09 20 20 20 22 2c 20 65 78 70 65 63  ue...   ", expec
1e20: 74 65 64 3a 20 22 20 65 78 70 65 63 74 65 64 20  ted: " expected 
1e30: 22 2c 20 74 6f 6c 3a 20 22 20 74 6f 6c 20 22 2c  ", tol: " tol ",
1e40: 20 75 6e 69 74 73 3a 20 22 20 75 6e 69 74 73 29   units: " units)
1e50: 0a 20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20  .      (if (and 
1e60: 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 74  value expected t
1e70: 6f 6c 29 20 3b 3b 20 61 6c 6c 20 74 68 72 65 65  ol) ;; all three
1e80: 20 72 65 71 75 69 72 65 64 0a 09 20 20 28 6c 65   required..  (le
1e90: 74 20 28 28 64 61 74 20 28 63 6f 6e 63 20 63 61  t ((dat (conc ca
1ea0: 74 65 67 6f 72 79 20 22 2c 22 0a 09 09 09 20 20  tegory ","....  
1eb0: 20 76 61 72 69 61 62 6c 65 20 22 2c 22 0a 09 09   variable ","...
1ec0: 09 20 20 20 76 61 6c 75 65 20 20 20 20 22 2c 22  .   value    ","
1ed0: 0a 09 09 09 20 20 20 65 78 70 65 63 74 65 64 20  ....   expected 
1ee0: 22 2c 22 0a 09 09 09 20 20 20 74 6f 6c 20 20 20  ","....   tol   
1ef0: 20 20 20 22 2c 22 0a 09 09 09 20 20 20 75 6e 69     ","....   uni
1f00: 74 73 20 20 20 20 22 2c 22 0a 09 09 09 20 20 20  ts    ","....   
1f10: 64 63 6f 6d 6d 65 6e 74 20 22 2c 2c 22 20 3b 3b  dcomment ",," ;;
1f20: 20 65 78 74 72 61 20 63 6f 6d 6d 61 20 66 6f 72   extra comma for
1f30: 20 73 74 61 74 75 73 0a 09 09 09 20 20 20 74 79   status....   ty
1f40: 70 65 20 20 20 20 20 29 29 29 0a 09 20 20 20 20  pe     )))..    
1f50: 28 72 64 62 3a 63 73 76 2d 3e 74 65 73 74 2d 64  (rdb:csv->test-d
1f60: 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 0a 09  ata db test-id..
1f70: 09 09 09 64 61 74 29 29 29 29 0a 20 20 20 20 20  ...dat)))).     
1f80: 20 0a 20 20 20 20 3b 3b 20 6e 65 65 64 20 74 6f   .    ;; need to
1f90: 20 75 70 64 61 74 65 20 74 68 65 20 74 6f 70 20   update the top 
1fa0: 74 65 73 74 20 72 65 63 6f 72 64 20 69 66 20 50  test record if P
1fb0: 41 53 53 20 6f 72 20 46 41 49 4c 20 61 6e 64 20  ASS or FAIL and 
1fc0: 74 68 69 73 20 69 73 20 61 20 73 75 62 74 65 73  this is a subtes
1fd0: 74 0a 20 20 20 20 28 72 64 62 3a 72 6f 6c 6c 2d  t.    (rdb:roll-
1fe0: 75 70 2d 70 61 73 73 2d 66 61 69 6c 2d 63 6f 75  up-pass-fail-cou
1ff0: 6e 74 73 20 64 62 20 72 75 6e 2d 69 64 20 74 65  nts db run-id te
2000: 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74  st-name item-pat
2010: 68 20 73 74 61 74 75 73 29 0a 0a 20 20 20 20 28  h status)..    (
2020: 69 66 20 28 6f 72 20 28 61 6e 64 20 28 73 74 72  if (or (and (str
2030: 69 6e 67 3f 20 63 6f 6d 6d 65 6e 74 29 0a 09 09  ing? comment)...
2040: 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28   (string-match (
2050: 72 65 67 65 78 70 20 22 5c 5c 53 2b 22 29 20 63  regexp "\\S+") c
2060: 6f 6d 6d 65 6e 74 29 29 0a 09 20 20 20 20 77 61  omment))..    wa
2070: 69 76 65 64 29 0a 09 28 6c 65 74 20 28 28 63 6d  ived)..(let ((cm
2080: 74 20 20 28 69 66 20 77 61 69 76 65 64 20 77 61  t  (if waived wa
2090: 69 76 65 64 20 63 6f 6d 6d 65 6e 74 29 29 29 0a  ived comment))).
20a0: 09 20 20 28 72 64 62 3a 74 65 73 74 2d 73 65 74  .  (rdb:test-set
20b0: 2d 63 6f 6d 6d 65 6e 74 20 64 62 20 74 65 73 74  -comment db test
20c0: 2d 69 64 20 63 6d 74 29 29 29 0a 20 20 20 20 29  -id cmt))).    )
20d0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 65 73 74  )..(define (test
20e0: 2d 73 65 74 2d 74 6f 70 6c 6f 67 21 20 64 62 20  -set-toplog! db 
20f0: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65  run-id test-name
2100: 20 6c 6f 67 66 29 20 0a 20 20 28 73 71 6c 69 74   logf) .  (sqlit
2110: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55  e3:execute db "U
2120: 50 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20  PDATE tests SET 
2130: 66 69 6e 61 6c 5f 6c 6f 67 66 3d 3f 20 57 48 45  final_logf=? WHE
2140: 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20  RE run_id=? AND 
2150: 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69  testname=? AND i
2160: 74 65 6d 5f 70 61 74 68 3d 27 27 3b 22 20 0a 09  tem_path='';" ..
2170: 09 20 20 20 6c 6f 67 66 20 72 75 6e 2d 69 64 20  .   logf run-id 
2180: 74 65 73 74 2d 6e 61 6d 65 29 29 0a 0a 28 64 65  test-name))..(de
2190: 66 69 6e 65 20 28 74 65 73 74 73 3a 73 75 6d 6d  fine (tests:summ
21a0: 61 72 69 7a 65 2d 69 74 65 6d 73 20 64 62 20 72  arize-items db r
21b0: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20  un-id test-name 
21c0: 66 6f 72 63 65 29 0a 20 20 3b 3b 20 69 66 20 6e  force).  ;; if n
21d0: 6f 74 20 66 6f 72 63 65 20 74 68 65 6e 20 6f 6e  ot force then on
21e0: 6c 79 20 75 70 64 61 74 65 20 74 68 65 20 72 65  ly update the re
21f0: 63 6f 72 64 20 69 66 20 6f 6e 65 20 6f 66 20 74  cord if one of t
2200: 68 65 73 65 20 69 73 20 74 72 75 65 3a 0a 20 20  hese is true:.  
2210: 3b 3b 20 20 20 31 2e 20 6c 6f 67 66 20 69 73 20  ;;   1. logf is 
2220: 22 6c 6f 67 2f 66 69 6e 61 6c 2e 6c 6f 67 0a 20  "log/final.log. 
2230: 20 3b 3b 20 20 20 32 2e 20 6c 6f 67 66 20 69 73   ;;   2. logf is
2240: 20 73 61 6d 65 20 61 73 20 6f 75 74 70 75 74 66   same as outputf
2250: 69 6c 65 6e 61 6d 65 0a 20 20 28 6c 65 74 20 28  ilename.  (let (
2260: 28 6f 75 74 70 75 74 66 69 6c 65 6e 61 6d 65 20  (outputfilename 
2270: 28 63 6f 6e 63 20 22 6d 65 67 61 74 65 73 74 2d  (conc "megatest-
2280: 72 6f 6c 6c 75 70 2d 22 20 74 65 73 74 2d 6e 61  rollup-" test-na
2290: 6d 65 20 22 2e 68 74 6d 6c 22 29 29 0a 09 28 6f  me ".html"))..(o
22a0: 72 69 67 2d 64 69 72 20 20 20 20 20 20 20 28 63  rig-dir       (c
22b0: 75 72 72 65 6e 74 2d 64 69 72 65 63 74 6f 72 79  urrent-directory
22c0: 29 29 0a 09 28 6c 6f 67 66 20 20 20 20 20 20 20  ))..(logf       
22d0: 20 20 20 20 23 66 29 29 0a 20 20 20 20 28 73 71      #f)).    (sq
22e0: 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72  lite3:for-each-r
22f0: 6f 77 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61  ow .     (lambda
2300: 20 28 70 61 74 68 20 66 69 6e 61 6c 5f 6c 6f 67   (path final_log
2310: 66 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20  f).       (set! 
2320: 6c 6f 67 66 20 66 69 6e 61 6c 5f 6c 6f 67 66 29  logf final_logf)
2330: 0a 20 20 20 20 20 20 20 28 69 66 20 28 64 69 72  .       (if (dir
2340: 65 63 74 6f 72 79 3f 20 70 61 74 68 29 0a 09 20  ectory? path).. 
2350: 20 20 28 62 65 67 69 6e 0a 09 20 20 20 20 20 28    (begin..     (
2360: 70 72 69 6e 74 20 22 46 6f 75 6e 64 20 70 61 74  print "Found pat
2370: 68 3a 20 22 20 70 61 74 68 29 0a 09 20 20 20 20  h: " path)..    
2380: 20 28 63 68 61 6e 67 65 2d 64 69 72 65 63 74 6f   (change-directo
2390: 72 79 20 70 61 74 68 29 29 0a 09 20 20 20 20 20  ry path))..     
23a0: 3b 3b 20 28 73 65 74 21 20 6f 75 74 70 75 74 66  ;; (set! outputf
23b0: 69 6c 65 6e 61 6d 65 20 28 63 6f 6e 63 20 70 61  ilename (conc pa
23c0: 74 68 20 22 2f 22 20 6f 75 74 70 75 74 66 69 6c  th "/" outputfil
23d0: 65 6e 61 6d 65 29 29 29 0a 09 20 20 20 28 70 72  ename)))..   (pr
23e0: 69 6e 74 20 22 4e 6f 20 73 75 63 68 20 70 61 74  int "No such pat
23f0: 68 3a 20 22 20 70 61 74 68 29 29 29 0a 20 20 20  h: " path))).   
2400: 20 20 64 62 20 0a 20 20 20 20 20 22 53 45 4c 45    db .     "SELE
2410: 43 54 20 72 75 6e 64 69 72 2c 66 69 6e 61 6c 5f  CT rundir,final_
2420: 6c 6f 67 66 20 46 52 4f 4d 20 74 65 73 74 73 20  logf FROM tests 
2430: 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41  WHERE run_id=? A
2440: 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e  ND testname=? AN
2450: 44 20 69 74 65 6d 5f 70 61 74 68 3d 27 27 3b 22  D item_path='';"
2460: 0a 20 20 20 20 20 72 75 6e 2d 69 64 20 74 65 73  .     run-id tes
2470: 74 2d 6e 61 6d 65 29 0a 20 20 20 20 28 70 72 69  t-name).    (pri
2480: 6e 74 20 22 73 75 6d 6d 61 72 69 7a 65 2d 69 74  nt "summarize-it
2490: 65 6d 73 20 77 69 74 68 20 6c 6f 67 66 20 22 20  ems with logf " 
24a0: 6c 6f 67 66 29 0a 20 20 20 20 28 69 66 20 28 6f  logf).    (if (o
24b0: 72 20 28 65 71 75 61 6c 3f 20 6c 6f 67 66 20 22  r (equal? logf "
24c0: 6c 6f 67 73 2f 66 69 6e 61 6c 2e 6c 6f 67 22 29  logs/final.log")
24d0: 0a 09 20 20 20 20 28 65 71 75 61 6c 3f 20 6c 6f  ..    (equal? lo
24e0: 67 66 20 6f 75 74 70 75 74 66 69 6c 65 6e 61 6d  gf outputfilenam
24f0: 65 29 0a 09 20 20 20 20 66 6f 72 63 65 29 0a 09  e)..    force)..
2500: 28 62 65 67 69 6e 0a 09 20 20 28 69 66 20 28 6f  (begin..  (if (o
2510: 62 74 61 69 6e 2d 64 6f 74 2d 6c 6f 63 6b 20 6f  btain-dot-lock o
2520: 75 74 70 75 74 66 69 6c 65 6e 61 6d 65 20 31 20  utputfilename 1 
2530: 32 30 20 33 30 29 20 3b 3b 20 72 65 74 72 79 20  20 30) ;; retry 
2540: 65 76 65 72 79 20 73 65 63 6f 6e 64 20 66 6f 72  every second for
2550: 20 32 30 20 73 65 63 6f 6e 64 73 2c 20 63 61 6c   20 seconds, cal
2560: 6c 20 69 74 20 64 65 61 64 20 61 66 74 65 72 20  l it dead after 
2570: 33 30 20 73 65 63 6f 6e 64 73 20 61 6e 64 20 73  30 seconds and s
2580: 74 65 61 6c 20 74 68 65 20 6c 6f 63 6b 0a 09 20  teal the lock.. 
2590: 20 20 20 20 20 28 70 72 69 6e 74 20 22 4f 62 74       (print "Obt
25a0: 61 69 6e 65 64 20 6c 6f 63 6b 20 66 6f 72 20 22  ained lock for "
25b0: 20 6f 75 74 70 75 74 66 69 6c 65 6e 61 6d 65 29   outputfilename)
25c0: 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74 20 22  ..      (print "
25d0: 46 61 69 6c 65 64 20 74 6f 20 6f 62 74 61 69 6e  Failed to obtain
25e0: 20 6c 6f 63 6b 20 66 6f 72 20 22 20 6f 75 74 70   lock for " outp
25f0: 75 74 66 69 6c 65 6e 61 6d 65 29 29 0a 09 20 20  utfilename))..  
2600: 28 6c 65 74 20 28 28 6f 75 70 20 20 20 20 28 6f  (let ((oup    (o
2610: 70 65 6e 2d 6f 75 74 70 75 74 2d 66 69 6c 65 20  pen-output-file 
2620: 6f 75 74 70 75 74 66 69 6c 65 6e 61 6d 65 29 29  outputfilename))
2630: 0a 09 09 28 63 6f 75 6e 74 73 20 28 6d 61 6b 65  ...(counts (make
2640: 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 0a 09 09  -hash-table))...
2650: 28 73 74 61 74 65 63 6f 75 6e 74 73 20 28 6d 61  (statecounts (ma
2660: 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 0a  ke-hash-table)).
2670: 09 09 28 6f 75 74 74 78 74 20 22 22 29 0a 09 09  ..(outtxt "")...
2680: 28 74 6f 74 20 20 20 20 30 29 29 0a 09 20 20 20  (tot    0))..   
2690: 20 28 77 69 74 68 2d 6f 75 74 70 75 74 2d 74 6f   (with-output-to
26a0: 2d 70 6f 72 74 0a 09 09 6f 75 70 0a 09 20 20 20  -port...oup..   
26b0: 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 09 09     (lambda ()...
26c0: 28 73 65 74 21 20 6f 75 74 74 78 74 20 28 63 6f  (set! outtxt (co
26d0: 6e 63 20 6f 75 74 74 78 74 20 22 3c 68 74 6d 6c  nc outtxt "<html
26e0: 3e 3c 74 69 74 6c 65 3e 53 75 6d 6d 61 72 79 3a  ><title>Summary:
26f0: 20 22 20 74 65 73 74 2d 6e 61 6d 65 20 0a 09 09   " test-name ...
2700: 09 09 20 20 20 22 3c 2f 74 69 74 6c 65 3e 3c 62  ..   "</title><b
2710: 6f 64 79 3e 3c 68 32 3e 53 75 6d 6d 61 72 79 20  ody><h2>Summary 
2720: 66 6f 72 20 22 20 74 65 73 74 2d 6e 61 6d 65 20  for " test-name 
2730: 22 3c 2f 68 32 3e 22 29 29 0a 09 09 28 73 71 6c  "</h2>"))...(sql
2740: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f  ite3:for-each-ro
2750: 77 20 0a 09 09 20 28 6c 61 6d 62 64 61 20 28 69  w ... (lambda (i
2760: 64 20 69 74 65 6d 70 61 74 68 20 73 74 61 74 65  d itempath state
2770: 20 73 74 61 74 75 73 20 72 75 6e 5f 64 75 72 61   status run_dura
2780: 74 69 6f 6e 20 6c 6f 67 66 20 63 6f 6d 6d 65 6e  tion logf commen
2790: 74 29 0a 09 09 20 20 20 28 68 61 73 68 2d 74 61  t)...   (hash-ta
27a0: 62 6c 65 2d 73 65 74 21 20 63 6f 75 6e 74 73 20  ble-set! counts 
27b0: 73 74 61 74 75 73 20 28 2b 20 31 20 28 68 61 73  status (+ 1 (has
27c0: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61  h-table-ref/defa
27d0: 75 6c 74 20 63 6f 75 6e 74 73 20 73 74 61 74 75  ult counts statu
27e0: 73 20 30 29 29 29 0a 09 09 20 20 20 28 68 61 73  s 0)))...   (has
27f0: 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 73 74 61  h-table-set! sta
2800: 74 65 63 6f 75 6e 74 73 20 73 74 61 74 65 20 28  tecounts state (
2810: 2b 20 31 20 28 68 61 73 68 2d 74 61 62 6c 65 2d  + 1 (hash-table-
2820: 72 65 66 2f 64 65 66 61 75 6c 74 20 73 74 61 74  ref/default stat
2830: 65 63 6f 75 6e 74 73 20 73 74 61 74 65 20 30 29  ecounts state 0)
2840: 29 29 0a 09 09 20 20 20 28 73 65 74 21 20 6f 75  ))...   (set! ou
2850: 74 74 78 74 20 28 63 6f 6e 63 20 6f 75 74 74 78  ttxt (conc outtx
2860: 74 20 22 3c 74 72 3e 22 0a 09 09 09 09 20 20 20  t "<tr>".....   
2870: 20 20 20 22 3c 74 64 3e 3c 61 20 68 72 65 66 3d     "<td><a href=
2880: 5c 22 22 20 69 74 65 6d 70 61 74 68 20 22 2f 22  \"" itempath "/"
2890: 20 6c 6f 67 66 20 22 5c 22 3e 20 22 20 69 74 65   logf "\"> " ite
28a0: 6d 70 61 74 68 20 22 3c 2f 61 3e 3c 2f 74 64 3e  mpath "</a></td>
28b0: 22 20 0a 09 09 09 09 20 20 20 20 20 20 22 3c 74  " .....      "<t
28c0: 64 3e 22 20 73 74 61 74 65 20 20 20 20 22 3c 2f  d>" state    "</
28d0: 74 64 3e 22 20 0a 09 09 09 09 20 20 20 20 20 20  td>" .....      
28e0: 22 3c 74 64 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72  "<td><font color
28f0: 3d 22 20 28 63 6f 6d 6d 6f 6e 3a 67 65 74 2d 63  =" (common:get-c
2900: 6f 6c 6f 72 2d 66 72 6f 6d 2d 73 74 61 74 75 73  olor-from-status
2910: 20 73 74 61 74 75 73 29 0a 09 09 09 09 20 20 20   status).....   
2920: 20 20 20 22 3e 22 20 20 20 73 74 61 74 75 73 20     ">"   status 
2930: 20 20 22 3c 2f 66 6f 6e 74 3e 3c 2f 74 64 3e 22    "</font></td>"
2940: 0a 09 09 09 09 20 20 20 20 20 20 22 3c 74 64 3e  .....      "<td>
2950: 22 20 28 69 66 20 28 65 71 75 61 6c 3f 20 63 6f  " (if (equal? co
2960: 6d 6d 65 6e 74 20 22 22 29 0a 09 09 09 09 09 09  mment "").......
2970: 20 22 26 6e 62 73 70 3b 22 0a 09 09 09 09 09 09   "&nbsp;".......
2980: 20 63 6f 6d 6d 65 6e 74 29 20 22 3c 2f 74 64 3e   comment) "</td>
2990: 22 0a 09 09 09 09 09 09 20 22 3c 2f 74 72 3e 22  "....... "</tr>"
29a0: 29 29 29 0a 09 09 20 64 62 0a 09 09 20 22 53 45  )))... db... "SE
29b0: 4c 45 43 54 20 69 64 2c 69 74 65 6d 5f 70 61 74  LECT id,item_pat
29c0: 68 2c 73 74 61 74 65 2c 73 74 61 74 75 73 2c 72  h,state,status,r
29d0: 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 66 69 6e 61  un_duration,fina
29e0: 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d 65 6e 74 20 46  l_logf,comment F
29f0: 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20  ROM tests WHERE 
2a00: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73  run_id=? AND tes
2a10: 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d  tname=? AND item
2a20: 5f 70 61 74 68 20 21 3d 20 27 27 3b 22 0a 09 09  _path != '';"...
2a30: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d   run-id test-nam
2a40: 65 29 0a 0a 09 09 28 70 72 69 6e 74 20 22 3c 74  e)....(print "<t
2a50: 61 62 6c 65 3e 3c 74 72 3e 3c 74 64 20 76 61 6c  able><tr><td val
2a60: 69 67 6e 3d 5c 22 74 6f 70 5c 22 3e 22 29 0a 09  ign=\"top\">")..
2a70: 09 3b 3b 20 50 72 69 6e 74 20 6f 75 74 20 73 74  .;; Print out st
2a80: 61 74 73 20 66 6f 72 20 73 74 61 74 75 73 0a 09  ats for status..
2a90: 09 28 73 65 74 21 20 74 6f 74 20 30 29 0a 09 09  .(set! tot 0)...
2aa0: 28 70 72 69 6e 74 20 22 3c 74 61 62 6c 65 20 63  (print "<table c
2ab0: 65 6c 6c 73 70 61 63 69 6e 67 3d 5c 22 30 5c 22  ellspacing=\"0\"
2ac0: 20 62 6f 72 64 65 72 3d 5c 22 31 5c 22 3e 3c 74   border=\"1\"><t
2ad0: 72 3e 3c 74 64 20 63 6f 6c 73 70 61 6e 3d 5c 22  r><td colspan=\"
2ae0: 32 5c 22 3e 3c 68 32 3e 53 74 61 74 65 20 73 74  2\"><h2>State st
2af0: 61 74 73 3c 2f 68 32 3e 3c 2f 74 64 3e 3c 2f 74  ats</h2></td></t
2b00: 72 3e 22 29 0a 09 09 28 66 6f 72 2d 65 61 63 68  r>")...(for-each
2b10: 20 28 6c 61 6d 62 64 61 20 28 73 74 61 74 65 29   (lambda (state)
2b20: 0a 09 09 09 20 20 20 20 28 73 65 74 21 20 74 6f  ....    (set! to
2b30: 74 20 28 2b 20 74 6f 74 20 28 68 61 73 68 2d 74  t (+ tot (hash-t
2b40: 61 62 6c 65 2d 72 65 66 20 73 74 61 74 65 63 6f  able-ref stateco
2b50: 75 6e 74 73 20 73 74 61 74 65 29 29 29 0a 09 09  unts state)))...
2b60: 09 20 20 20 20 28 70 72 69 6e 74 20 22 3c 74 72  .    (print "<tr
2b70: 3e 3c 74 64 3e 22 20 73 74 61 74 65 20 22 3c 2f  ><td>" state "</
2b80: 74 64 3e 3c 74 64 3e 22 20 28 68 61 73 68 2d 74  td><td>" (hash-t
2b90: 61 62 6c 65 2d 72 65 66 20 73 74 61 74 65 63 6f  able-ref stateco
2ba0: 75 6e 74 73 20 73 74 61 74 65 29 20 22 3c 2f 74  unts state) "</t
2bb0: 64 3e 3c 2f 74 72 3e 22 29 29 0a 09 09 09 20 20  d></tr>"))....  
2bc0: 28 68 61 73 68 2d 74 61 62 6c 65 2d 6b 65 79 73  (hash-table-keys
2bd0: 20 73 74 61 74 65 63 6f 75 6e 74 73 29 29 0a 09   statecounts))..
2be0: 09 28 70 72 69 6e 74 20 22 3c 74 72 3e 3c 74 64  .(print "<tr><td
2bf0: 3e 54 6f 74 61 6c 3c 2f 74 64 3e 3c 74 64 3e 22  >Total</td><td>"
2c00: 20 74 6f 74 20 22 3c 2f 74 64 3e 3c 2f 74 72 3e   tot "</td></tr>
2c10: 3c 2f 74 61 62 6c 65 3e 22 29 0a 09 09 28 70 72  </table>")...(pr
2c20: 69 6e 74 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61  int "</td><td va
2c30: 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 3e 22 29 0a  lign=\"top\">").
2c40: 09 09 3b 3b 20 50 72 69 6e 74 20 6f 75 74 20 73  ..;; Print out s
2c50: 74 61 74 73 20 66 6f 72 20 73 74 61 74 65 0a 09  tats for state..
2c60: 09 28 73 65 74 21 20 74 6f 74 20 30 29 0a 09 09  .(set! tot 0)...
2c70: 28 70 72 69 6e 74 20 22 3c 74 61 62 6c 65 20 63  (print "<table c
2c80: 65 6c 6c 73 70 61 63 69 6e 67 3d 5c 22 30 5c 22  ellspacing=\"0\"
2c90: 20 62 6f 72 64 65 72 3d 5c 22 31 5c 22 3e 3c 74   border=\"1\"><t
2ca0: 72 3e 3c 74 64 20 63 6f 6c 73 70 61 6e 3d 5c 22  r><td colspan=\"
2cb0: 32 5c 22 3e 3c 68 32 3e 53 74 61 74 75 73 20 73  2\"><h2>Status s
2cc0: 74 61 74 73 3c 2f 68 32 3e 3c 2f 74 64 3e 3c 2f  tats</h2></td></
2cd0: 74 72 3e 22 29 0a 09 09 28 66 6f 72 2d 65 61 63  tr>")...(for-eac
2ce0: 68 20 28 6c 61 6d 62 64 61 20 28 73 74 61 74 75  h (lambda (statu
2cf0: 73 29 0a 09 09 09 20 20 20 20 28 73 65 74 21 20  s)....    (set! 
2d00: 74 6f 74 20 28 2b 20 74 6f 74 20 28 68 61 73 68  tot (+ tot (hash
2d10: 2d 74 61 62 6c 65 2d 72 65 66 20 63 6f 75 6e 74  -table-ref count
2d20: 73 20 73 74 61 74 75 73 29 29 29 0a 09 09 09 20  s status))).... 
2d30: 20 20 20 28 70 72 69 6e 74 20 22 3c 74 72 3e 3c     (print "<tr><
2d40: 74 64 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c  td><font color=\
2d50: 22 22 20 28 63 6f 6d 6d 6f 6e 3a 67 65 74 2d 63  "" (common:get-c
2d60: 6f 6c 6f 72 2d 66 72 6f 6d 2d 73 74 61 74 75 73  olor-from-status
2d70: 20 73 74 61 74 75 73 29 20 22 5c 22 3e 22 20 73   status) "\">" s
2d80: 74 61 74 75 73 0a 09 09 09 09 20 20 20 22 3c 2f  tatus.....   "</
2d90: 66 6f 6e 74 3e 3c 2f 74 64 3e 3c 74 64 3e 22 20  font></td><td>" 
2da0: 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 20  (hash-table-ref 
2db0: 63 6f 75 6e 74 73 20 73 74 61 74 75 73 29 20 22  counts status) "
2dc0: 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 29 0a 09 09  </td></tr>"))...
2dd0: 09 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 6b  .  (hash-table-k
2de0: 65 79 73 20 63 6f 75 6e 74 73 29 29 0a 09 09 28  eys counts))...(
2df0: 70 72 69 6e 74 20 22 3c 74 72 3e 3c 74 64 3e 54  print "<tr><td>T
2e00: 6f 74 61 6c 3c 2f 74 64 3e 3c 74 64 3e 22 20 74  otal</td><td>" t
2e10: 6f 74 20 22 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f  ot "</td></tr></
2e20: 74 61 62 6c 65 3e 22 29 0a 09 09 28 70 72 69 6e  table>")...(prin
2e30: 74 20 22 3c 2f 74 64 3e 3c 2f 74 64 3e 3c 2f 74  t "</td></td></t
2e40: 72 3e 3c 2f 74 61 62 6c 65 3e 22 29 0a 0a 09 09  r></table>")....
2e50: 28 70 72 69 6e 74 20 22 3c 74 61 62 6c 65 20 63  (print "<table c
2e60: 65 6c 6c 73 70 61 63 69 6e 67 3d 5c 22 30 5c 22  ellspacing=\"0\"
2e70: 20 62 6f 72 64 65 72 3d 5c 22 31 5c 22 3e 22 20   border=\"1\">" 
2e80: 0a 09 09 20 20 20 20 20 20 20 22 3c 74 72 3e 3c  ...       "<tr><
2e90: 74 64 3e 49 74 65 6d 3c 2f 74 64 3e 3c 74 64 3e  td>Item</td><td>
2ea0: 53 74 61 74 65 3c 2f 74 64 3e 3c 74 64 3e 53 74  State</td><td>St
2eb0: 61 74 75 73 3c 2f 74 64 3e 3c 74 64 3e 43 6f 6d  atus</td><td>Com
2ec0: 6d 65 6e 74 3c 2f 74 64 3e 22 0a 09 09 20 20 20  ment</td>"...   
2ed0: 20 20 20 20 6f 75 74 74 78 74 20 22 3c 2f 74 61      outtxt "</ta
2ee0: 62 6c 65 3e 3c 2f 62 6f 64 79 3e 3c 2f 68 74 6d  ble></body></htm
2ef0: 6c 3e 22 29 0a 09 09 28 72 65 6c 65 61 73 65 2d  l>")...(release-
2f00: 64 6f 74 2d 6c 6f 63 6b 20 6f 75 74 70 75 74 66  dot-lock outputf
2f10: 69 6c 65 6e 61 6d 65 29 29 29 0a 09 20 20 20 20  ilename)))..    
2f20: 28 63 6c 6f 73 65 2d 6f 75 74 70 75 74 2d 70 6f  (close-output-po
2f30: 72 74 20 6f 75 70 29 0a 09 20 20 20 20 28 63 68  rt oup)..    (ch
2f40: 61 6e 67 65 2d 64 69 72 65 63 74 6f 72 79 20 6f  ange-directory o
2f50: 72 69 67 2d 64 69 72 29 0a 09 20 20 20 20 28 74  rig-dir)..    (t
2f60: 65 73 74 2d 73 65 74 2d 74 6f 70 6c 6f 67 21 20  est-set-toplog! 
2f70: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e  db run-id test-n
2f80: 61 6d 65 20 6f 75 74 70 75 74 66 69 6c 65 6e 61  ame outputfilena
2f90: 6d 65 29 0a 09 20 20 20 20 29 29 29 29 29 0a 0a  me)..    )))))..
2fa0: 28 64 65 66 69 6e 65 20 28 67 65 74 2d 61 6c 6c  (define (get-all
2fb0: 2d 6c 65 67 61 6c 2d 74 65 73 74 73 29 0a 20 20  -legal-tests).  
2fc0: 28 6c 65 74 2a 20 28 28 74 65 73 74 73 20 20 28  (let* ((tests  (
2fd0: 67 6c 6f 62 20 28 63 6f 6e 63 20 2a 74 6f 70 70  glob (conc *topp
2fe0: 61 74 68 2a 20 22 2f 74 65 73 74 73 2f 2a 22 29  ath* "/tests/*")
2ff0: 29 29 0a 09 20 28 72 65 73 20 20 20 20 27 28 29  )).. (res    '()
3000: 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a 70 72  )).    (debug:pr
3010: 69 6e 74 20 34 20 22 49 4e 46 4f 3a 20 4c 6f 6f  int 4 "INFO: Loo
3020: 6b 69 6e 67 20 61 74 20 74 65 73 74 73 20 22 20  king at tests " 
3030: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65  (string-interspe
3040: 72 73 65 20 74 65 73 74 73 20 22 2c 22 29 29 0a  rse tests ",")).
3050: 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 28 6c      (for-each (l
3060: 61 6d 62 64 61 20 28 74 65 73 74 70 61 74 68 29  ambda (testpath)
3070: 0a 09 09 28 69 66 20 28 66 69 6c 65 2d 65 78 69  ...(if (file-exi
3080: 73 74 73 3f 20 28 63 6f 6e 63 20 74 65 73 74 70  sts? (conc testp
3090: 61 74 68 20 22 2f 74 65 73 74 63 6f 6e 66 69 67  ath "/testconfig
30a0: 22 29 29 0a 09 09 20 20 20 20 28 73 65 74 21 20  "))...    (set! 
30b0: 72 65 73 20 28 63 6f 6e 73 20 28 6c 61 73 74 20  res (cons (last 
30c0: 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 74 65  (string-split te
30d0: 73 74 70 61 74 68 20 22 2f 22 29 29 20 72 65 73  stpath "/")) res
30e0: 29 29 29 29 0a 09 20 20 20 20 20 20 74 65 73 74  ))))..      test
30f0: 73 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 28 64  s).    res))..(d
3100: 65 66 69 6e 65 20 28 74 65 73 74 3a 67 65 74 2d  efine (test:get-
3110: 74 65 73 74 63 6f 6e 66 69 67 20 74 65 73 74 2d  testconfig test-
3120: 6e 61 6d 65 20 73 79 73 74 65 6d 2d 61 6c 6c 6f  name system-allo
3130: 77 65 64 29 0a 20 20 28 6c 65 74 2a 20 28 28 74  wed).  (let* ((t
3140: 65 73 74 2d 70 61 74 68 20 20 20 20 28 63 6f 6e  est-path    (con
3150: 63 20 2a 74 6f 70 70 61 74 68 2a 20 22 2f 74 65  c *toppath* "/te
3160: 73 74 73 2f 22 20 74 65 73 74 2d 6e 61 6d 65 29  sts/" test-name)
3170: 29 0a 09 20 28 74 65 73 74 2d 63 6f 6e 66 69 67  ).. (test-config
3180: 66 20 28 63 6f 6e 63 20 74 65 73 74 2d 70 61 74  f (conc test-pat
3190: 68 20 22 2f 74 65 73 74 63 6f 6e 66 69 67 22 29  h "/testconfig")
31a0: 29 0a 09 20 28 74 65 73 74 65 78 69 73 74 73 20  ).. (testexists 
31b0: 20 20 28 61 6e 64 20 28 66 69 6c 65 2d 65 78 69    (and (file-exi
31c0: 73 74 73 3f 20 74 65 73 74 2d 63 6f 6e 66 69 67  sts? test-config
31d0: 66 29 28 66 69 6c 65 2d 72 65 61 64 2d 61 63 63  f)(file-read-acc
31e0: 65 73 73 3f 20 74 65 73 74 2d 63 6f 6e 66 69 67  ess? test-config
31f0: 66 29 29 29 29 0a 20 20 20 20 28 69 66 20 74 65  f)))).    (if te
3200: 73 74 65 78 69 73 74 73 0a 09 28 72 65 61 64 2d  stexists..(read-
3210: 63 6f 6e 66 69 67 20 74 65 73 74 2d 63 6f 6e 66  config test-conf
3220: 69 67 66 20 23 66 20 73 79 73 74 65 6d 2d 61 6c  igf #f system-al
3230: 6c 6f 77 65 64 20 65 6e 76 69 72 6f 6e 2d 70 61  lowed environ-pa
3240: 74 74 3a 20 28 69 66 20 73 79 73 74 65 6d 2d 61  tt: (if system-a
3250: 6c 6c 6f 77 65 64 0a 09 09 09 09 09 09 09 09 20  llowed......... 
3260: 20 20 20 20 20 22 70 72 65 2d 6c 61 75 6e 63 68       "pre-launch
3270: 2d 65 6e 76 2d 76 61 72 73 22 0a 09 09 09 09 09  -env-vars"......
3280: 09 09 09 20 20 20 20 20 20 23 66 29 29 0a 09 23  ...      #f))..#
3290: 66 29 29 29 0a 20 20 0a 3b 3b 20 73 6f 72 74 20  f))).  .;; sort 
32a0: 74 65 73 74 73 20 62 79 20 70 72 69 6f 72 69 74  tests by priorit
32b0: 79 20 61 6e 64 20 77 61 69 74 6f 6e 0a 3b 3b 20  y and waiton.;; 
32c0: 4d 6f 76 65 20 74 65 73 74 20 73 70 65 63 69 66  Move test specif
32d0: 69 63 20 73 74 75 66 66 20 74 6f 20 61 20 74 65  ic stuff to a te
32e0: 73 74 20 75 6e 69 74 20 46 49 58 4d 45 20 6f 6e  st unit FIXME on
32f0: 65 20 6f 66 20 74 68 65 73 65 20 64 61 79 73 0a  e of these days.
3300: 28 64 65 66 69 6e 65 20 28 74 65 73 74 73 3a 73  (define (tests:s
3310: 6f 72 74 2d 62 79 2d 70 72 69 6f 72 69 74 79 2d  ort-by-priority-
3320: 61 6e 64 2d 77 61 69 74 6f 6e 20 74 65 73 74 2d  and-waiton test-
3330: 72 65 63 6f 72 64 73 29 0a 20 20 28 6c 65 74 20  records).  (let 
3340: 28 28 6d 75 6e 67 65 70 72 69 6f 72 69 74 79 20  ((mungepriority 
3350: 28 6c 61 6d 62 64 61 20 28 70 72 69 6f 72 69 74  (lambda (priorit
3360: 79 29 0a 09 09 09 20 28 69 66 20 70 72 69 6f 72  y).... (if prior
3370: 69 74 79 0a 09 09 09 20 20 20 20 20 28 6c 65 74  ity....     (let
3380: 20 28 28 74 6d 70 20 28 61 6e 79 2d 3e 6e 75 6d   ((tmp (any->num
3390: 62 65 72 20 70 72 69 6f 72 69 74 79 29 29 29 0a  ber priority))).
33a0: 09 09 09 20 20 20 20 20 20 20 28 69 66 20 74 6d  ...       (if tm
33b0: 70 20 74 6d 70 20 28 62 65 67 69 6e 20 28 64 65  p tmp (begin (de
33c0: 62 75 67 3a 70 72 69 6e 74 20 30 20 22 45 52 52  bug:print 0 "ERR
33d0: 4f 52 3a 20 62 61 64 20 70 72 69 6f 72 69 74 79  OR: bad priority
33e0: 20 76 61 6c 75 65 20 22 20 70 72 69 6f 72 69 74   value " priorit
33f0: 79 20 22 2c 20 75 73 69 6e 67 20 30 22 29 20 30  y ", using 0") 0
3400: 29 29 29 0a 09 09 09 20 20 20 20 20 30 29 29 29  )))....     0)))
3410: 29 0a 20 20 20 20 28 73 6f 72 74 20 0a 20 20 20  ).    (sort .   
3420: 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 6b 65    (hash-table-ke
3430: 79 73 20 74 65 73 74 2d 72 65 63 6f 72 64 73 29  ys test-records)
3440: 20 3b 3b 20 61 76 6f 69 64 20 64 65 61 6c 69 6e   ;; avoid dealin
3450: 67 20 77 69 74 68 20 64 65 6c 65 74 65 64 20 74  g with deleted t
3460: 65 73 74 73 2c 20 6c 6f 6f 6b 20 61 74 20 74 68  ests, look at th
3470: 65 20 68 61 73 68 20 74 61 62 6c 65 0a 20 20 20  e hash table.   
3480: 20 20 28 6c 61 6d 62 64 61 20 28 61 20 62 29 0a    (lambda (a b).
3490: 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 61         (let* ((a
34a0: 2d 72 65 63 6f 72 64 20 20 20 28 68 61 73 68 2d  -record   (hash-
34b0: 74 61 62 6c 65 2d 72 65 66 20 74 65 73 74 2d 72  table-ref test-r
34c0: 65 63 6f 72 64 73 20 61 29 29 0a 09 20 20 20 20  ecords a))..    
34d0: 20 20 28 62 2d 72 65 63 6f 72 64 20 20 20 28 68    (b-record   (h
34e0: 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 20 74 65  ash-table-ref te
34f0: 73 74 2d 72 65 63 6f 72 64 73 20 62 29 29 0a 09  st-records b))..
3500: 20 20 20 20 20 20 28 61 2d 77 61 69 74 6f 6e 73        (a-waitons
3510: 20 20 28 74 65 73 74 73 3a 74 65 73 74 71 75 65    (tests:testque
3520: 75 65 2d 67 65 74 2d 77 61 69 74 6f 6e 73 20 61  ue-get-waitons a
3530: 2d 72 65 63 6f 72 64 29 29 0a 09 20 20 20 20 20  -record))..     
3540: 20 28 62 2d 77 61 69 74 6f 6e 73 20 20 28 74 65   (b-waitons  (te
3550: 73 74 73 3a 74 65 73 74 71 75 65 75 65 2d 67 65  sts:testqueue-ge
3560: 74 2d 77 61 69 74 6f 6e 73 20 62 2d 72 65 63 6f  t-waitons b-reco
3570: 72 64 29 29 0a 09 20 20 20 20 20 20 28 61 2d 63  rd))..      (a-c
3580: 6f 6e 66 69 67 20 20 20 28 74 65 73 74 73 3a 74  onfig   (tests:t
3590: 65 73 74 71 75 65 75 65 2d 67 65 74 2d 74 65 73  estqueue-get-tes
35a0: 74 63 6f 6e 66 69 67 20 20 61 2d 72 65 63 6f 72  tconfig  a-recor
35b0: 64 29 29 0a 09 20 20 20 20 20 20 28 62 2d 63 6f  d))..      (b-co
35c0: 6e 66 69 67 20 20 20 28 74 65 73 74 73 3a 74 65  nfig   (tests:te
35d0: 73 74 71 75 65 75 65 2d 67 65 74 2d 74 65 73 74  stqueue-get-test
35e0: 63 6f 6e 66 69 67 20 20 62 2d 72 65 63 6f 72 64  config  b-record
35f0: 29 29 0a 09 20 20 20 20 20 20 28 61 2d 72 61 77  ))..      (a-raw
3600: 2d 70 72 69 20 20 28 63 6f 6e 66 69 67 2d 6c 6f  -pri  (config-lo
3610: 6f 6b 75 70 20 61 2d 63 6f 6e 66 69 67 20 22 72  okup a-config "r
3620: 65 71 75 69 72 65 6d 65 6e 74 73 22 20 22 70 72  equirements" "pr
3630: 69 6f 72 69 74 79 22 29 29 0a 09 20 20 20 20 20  iority"))..     
3640: 20 28 62 2d 72 61 77 2d 70 72 69 20 20 28 63 6f   (b-raw-pri  (co
3650: 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20 62 2d 63 6f  nfig-lookup b-co
3660: 6e 66 69 67 20 22 72 65 71 75 69 72 65 6d 65 6e  nfig "requiremen
3670: 74 73 22 20 22 70 72 69 6f 72 69 74 79 22 29 29  ts" "priority"))
3680: 0a 09 20 20 20 20 20 20 28 61 2d 70 72 69 6f 72  ..      (a-prior
3690: 69 74 79 20 28 6d 75 6e 67 65 70 72 69 6f 72 69  ity (mungepriori
36a0: 74 79 20 61 2d 72 61 77 2d 70 72 69 29 29 0a 09  ty a-raw-pri))..
36b0: 20 20 20 20 20 20 28 62 2d 70 72 69 6f 72 69 74        (b-priorit
36c0: 79 20 28 6d 75 6e 67 65 70 72 69 6f 72 69 74 79  y (mungepriority
36d0: 20 62 2d 72 61 77 2d 70 72 69 29 29 29 0a 09 3b   b-raw-pri)))..;
36e0: 3b 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20  ;  (debug:print 
36f0: 35 20 22 73 6f 72 74 2d 62 79 2d 70 72 69 6f 72  5 "sort-by-prior
3700: 69 74 79 2d 61 6e 64 2d 77 61 69 74 6f 6e 2c 20  ity-and-waiton, 
3710: 61 3a 20 22 20 61 20 22 20 62 3a 20 22 20 62 0a  a: " a " b: " b.
3720: 09 3b 3b 20 09 20 20 20 20 20 20 22 5c 6e 20 20  .;; .      "\n  
3730: 20 20 20 61 2d 72 65 63 6f 72 64 3a 20 20 20 22     a-record:   "
3740: 20 61 2d 72 65 63 6f 72 64 20 0a 09 3b 3b 20 09   a-record ..;; .
3750: 20 20 20 20 20 20 22 5c 6e 20 20 20 20 20 62 2d        "\n     b-
3760: 72 65 63 6f 72 64 3a 20 20 20 22 20 62 2d 72 65  record:   " b-re
3770: 63 6f 72 64 0a 09 3b 3b 20 09 20 20 20 20 20 20  cord..;; .      
3780: 22 5c 6e 20 20 20 20 20 61 2d 77 61 69 74 6f 6e  "\n     a-waiton
3790: 73 3a 20 20 22 20 61 2d 77 61 69 74 6f 6e 73 0a  s:  " a-waitons.
37a0: 09 3b 3b 20 09 20 20 20 20 20 20 22 5c 6e 20 20  .;; .      "\n  
37b0: 20 20 20 62 2d 77 61 69 74 6f 6e 73 3a 20 20 22     b-waitons:  "
37c0: 20 62 2d 77 61 69 74 6f 6e 73 0a 09 3b 3b 20 09   b-waitons..;; .
37d0: 20 20 20 20 20 20 22 5c 6e 20 20 20 20 20 61 2d        "\n     a-
37e0: 63 6f 6e 66 69 67 3a 20 20 20 22 20 28 68 61 73  config:   " (has
37f0: 68 2d 74 61 62 6c 65 2d 3e 61 6c 69 73 74 20 61  h-table->alist a
3800: 2d 63 6f 6e 66 69 67 29 0a 09 3b 3b 20 09 20 20  -config)..;; .  
3810: 20 20 20 20 22 5c 6e 20 20 20 20 20 62 2d 63 6f      "\n     b-co
3820: 6e 66 69 67 3a 20 20 20 22 20 28 68 61 73 68 2d  nfig:   " (hash-
3830: 74 61 62 6c 65 2d 3e 61 6c 69 73 74 20 62 2d 63  table->alist b-c
3840: 6f 6e 66 69 67 29 0a 09 3b 3b 20 09 20 20 20 20  onfig)..;; .    
3850: 20 20 22 5c 6e 20 20 20 20 20 61 2d 72 61 77 2d    "\n     a-raw-
3860: 70 72 69 3a 20 20 22 20 61 2d 72 61 77 2d 70 72  pri:  " a-raw-pr
3870: 69 0a 09 3b 3b 20 09 20 20 20 20 20 20 22 5c 6e  i..;; .      "\n
3880: 20 20 20 20 20 62 2d 72 61 77 2d 70 72 69 3a 20       b-raw-pri: 
3890: 20 22 20 62 2d 72 61 77 2d 70 72 69 0a 09 3b 3b   " b-raw-pri..;;
38a0: 20 09 20 20 20 20 20 20 22 5c 6e 20 20 20 20 20   .      "\n     
38b0: 61 2d 70 72 69 6f 72 69 74 79 3a 20 22 20 61 2d  a-priority: " a-
38c0: 70 72 69 6f 72 69 74 79 0a 09 3b 3b 20 09 20 20  priority..;; .  
38d0: 20 20 20 20 22 5c 6e 20 20 20 20 20 62 2d 70 72      "\n     b-pr
38e0: 69 6f 72 69 74 79 3a 20 22 20 62 2d 70 72 69 6f  iority: " b-prio
38f0: 72 69 74 79 29 0a 09 20 28 74 65 73 74 73 3a 74  rity).. (tests:t
3900: 65 73 74 71 75 65 75 65 2d 73 65 74 2d 70 72 69  estqueue-set-pri
3910: 6f 72 69 74 79 21 20 61 2d 72 65 63 6f 72 64 20  ority! a-record 
3920: 61 2d 70 72 69 6f 72 69 74 79 29 0a 09 20 28 74  a-priority).. (t
3930: 65 73 74 73 3a 74 65 73 74 71 75 65 75 65 2d 73  ests:testqueue-s
3940: 65 74 2d 70 72 69 6f 72 69 74 79 21 20 62 2d 72  et-priority! b-r
3950: 65 63 6f 72 64 20 62 2d 70 72 69 6f 72 69 74 79  ecord b-priority
3960: 29 0a 09 20 28 69 66 20 28 61 6e 64 20 61 2d 77  ).. (if (and a-w
3970: 61 69 74 6f 6e 73 20 28 6d 65 6d 62 65 72 20 28  aitons (member (
3980: 74 65 73 74 73 3a 74 65 73 74 71 75 65 75 65 2d  tests:testqueue-
3990: 67 65 74 2d 74 65 73 74 6e 61 6d 65 20 62 2d 72  get-testname b-r
39a0: 65 63 6f 72 64 29 20 61 2d 77 61 69 74 6f 6e 73  ecord) a-waitons
39b0: 29 29 0a 09 20 20 20 20 20 23 66 20 3b 3b 20 63  ))..     #f ;; c
39c0: 61 6e 6e 6f 74 20 68 61 76 65 20 61 20 77 68 69  annot have a whi
39d0: 63 68 20 69 73 20 77 61 69 74 69 6e 67 20 6f 6e  ch is waiting on
39e0: 20 62 20 68 61 70 70 65 6e 69 6e 67 20 62 65 66   b happening bef
39f0: 6f 72 65 20 62 0a 09 20 20 20 20 20 28 69 66 20  ore b..     (if 
3a00: 28 61 6e 64 20 62 2d 77 61 69 74 6f 6e 73 20 28  (and b-waitons (
3a10: 6d 65 6d 62 65 72 20 28 74 65 73 74 73 3a 74 65  member (tests:te
3a20: 73 74 71 75 65 75 65 2d 67 65 74 2d 74 65 73 74  stqueue-get-test
3a30: 6e 61 6d 65 20 61 2d 72 65 63 6f 72 64 29 20 62  name a-record) b
3a40: 2d 77 61 69 74 6f 6e 73 29 29 0a 09 09 20 23 74  -waitons))... #t
3a50: 20 3b 3b 20 74 68 69 73 20 69 73 20 74 68 65 20   ;; this is the 
3a60: 63 6f 72 72 65 63 74 20 6f 72 64 65 72 2c 20 62  correct order, b
3a70: 20 69 73 20 77 61 69 74 69 6e 67 20 6f 6e 20 61   is waiting on a
3a80: 20 61 6e 64 20 62 20 69 73 20 62 65 66 6f 72 65   and b is before
3a90: 20 61 0a 09 09 20 28 69 66 20 28 3e 20 61 2d 70   a... (if (> a-p
3aa0: 72 69 6f 72 69 74 79 20 62 2d 70 72 69 6f 72 69  riority b-priori
3ab0: 74 79 29 0a 09 09 20 20 20 20 20 23 74 20 3b 3b  ty)...     #t ;;
3ac0: 20 69 66 20 61 20 69 73 20 61 20 68 69 67 68 65   if a is a highe
3ad0: 72 20 70 72 69 6f 72 69 74 79 20 74 68 61 6e 20  r priority than 
3ae0: 62 20 74 68 65 6e 20 77 65 20 61 72 65 20 67 6f  b then we are go
3af0: 6f 64 20 74 6f 20 67 6f 0a 09 09 20 20 20 20 20  od to go...     
3b00: 23 66 29 29 29 29 29 29 29 29 0a 0a 0a 3b 3b 3d  #f))))))))...;;=
3b10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b50: 3d 3d 3d 3d 3d 0a 3b 3b 20 74 65 73 74 20 73 74  =====.;; test st
3b60: 65 70 73 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  eps.;;==========
3b70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3ba0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b  ============..;;
3bb0: 20 74 65 73 74 73 74 65 70 2d 73 65 74 2d 73 74   teststep-set-st
3bc0: 61 74 75 73 21 20 75 73 65 64 20 74 6f 20 62 65  atus! used to be
3bd0: 20 68 65 72 65 0a 0a 28 64 65 66 69 6e 65 20 28   here..(define (
3be0: 74 65 73 74 2d 67 65 74 2d 6b 69 6c 6c 2d 72 65  test-get-kill-re
3bf0: 71 75 65 73 74 20 64 62 20 72 75 6e 2d 69 64 20  quest db run-id 
3c00: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61  test-name itemda
3c10: 74 29 0a 20 20 28 6c 65 74 2a 20 28 28 69 74 65  t).  (let* ((ite
3c20: 6d 2d 70 61 74 68 20 28 69 74 65 6d 2d 6c 69 73  m-path (item-lis
3c30: 74 2d 3e 70 61 74 68 20 69 74 65 6d 64 61 74 29  t->path itemdat)
3c40: 29 0a 09 20 28 74 65 73 74 64 61 74 20 20 20 28  ).. (testdat   (
3c50: 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f  db:get-test-info
3c60: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d   db run-id test-
3c70: 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29  name item-path))
3c80: 29 0a 20 20 20 20 28 65 71 75 61 6c 3f 20 28 74  ).    (equal? (t
3c90: 65 73 74 3a 67 65 74 2d 73 74 61 74 65 20 74 65  est:get-state te
3ca0: 73 74 64 61 74 29 20 22 4b 49 4c 4c 52 45 51 22  stdat) "KILLREQ"
3cb0: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 65  )))..(define (te
3cc0: 73 74 2d 73 65 74 2d 6d 65 74 61 2d 69 6e 66 6f  st-set-meta-info
3cd0: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e   db run-id testn
3ce0: 61 6d 65 20 69 74 65 6d 64 61 74 29 0a 20 20 28  ame itemdat).  (
3cf0: 6c 65 74 20 28 28 69 74 65 6d 2d 70 61 74 68 20  let ((item-path 
3d00: 28 69 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 74 68  (item-list->path
3d10: 20 69 74 65 6d 64 61 74 29 29 0a 09 28 63 70 75   itemdat))..(cpu
3d20: 6c 6f 61 64 20 20 28 67 65 74 2d 63 70 75 2d 6c  load  (get-cpu-l
3d30: 6f 61 64 29 29 0a 09 28 68 6f 73 74 6e 61 6d 65  oad))..(hostname
3d40: 20 28 67 65 74 2d 68 6f 73 74 2d 6e 61 6d 65 29   (get-host-name)
3d50: 29 0a 09 28 64 69 73 6b 66 72 65 65 20 28 67 65  )..(diskfree (ge
3d60: 74 2d 64 66 20 28 63 75 72 72 65 6e 74 2d 64 69  t-df (current-di
3d70: 72 65 63 74 6f 72 79 29 29 29 0a 09 28 75 6e 61  rectory)))..(una
3d80: 6d 65 20 20 20 20 28 67 65 74 2d 75 6e 61 6d 65  me    (get-uname
3d90: 20 22 2d 73 72 76 70 69 6f 22 29 29 0a 09 28 72   "-srvpio"))..(r
3da0: 75 6e 70 61 74 68 20 20 28 63 75 72 72 65 6e 74  unpath  (current
3db0: 2d 64 69 72 65 63 74 6f 72 79 29 29 29 0a 20 20  -directory))).  
3dc0: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75    (sqlite3:execu
3dd0: 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 65  te db "UPDATE te
3de0: 73 74 73 20 53 45 54 20 68 6f 73 74 3d 3f 2c 63  sts SET host=?,c
3df0: 70 75 6c 6f 61 64 3d 3f 2c 64 69 73 6b 66 72 65  puload=?,diskfre
3e00: 65 3d 3f 2c 75 6e 61 6d 65 3d 3f 2c 72 75 6e 64  e=?,uname=?,rund
3e10: 69 72 3d 3f 20 57 48 45 52 45 20 72 75 6e 5f 69  ir=? WHERE run_i
3e20: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65  d=? AND testname
3e30: 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68  =? AND item_path
3e40: 3d 3f 3b 22 0a 09 09 20 20 68 6f 73 74 6e 61 6d  =?;"...  hostnam
3e50: 65 0a 09 09 20 20 63 70 75 6c 6f 61 64 0a 09 09  e...  cpuload...
3e60: 20 20 64 69 73 6b 66 72 65 65 0a 09 09 20 20 75    diskfree...  u
3e70: 6e 61 6d 65 0a 09 09 20 20 72 75 6e 70 61 74 68  name...  runpath
3e80: 0a 09 09 20 20 72 75 6e 2d 69 64 0a 09 09 20 20  ...  run-id...  
3e90: 74 65 73 74 6e 61 6d 65 0a 09 09 20 20 69 74 65  testname...  ite
3ea0: 6d 2d 70 61 74 68 29 29 29 0a 0a 3b 3b 3d 3d 3d  m-path)))..;;===
3eb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3ec0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3ed0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3ee0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3ef0: 3d 3d 3d 0a 3b 3b 20 41 20 52 20 43 20 48 20 49  ===.;; A R C H I
3f00: 20 56 20 49 20 4e 20 47 0a 3b 3b 3d 3d 3d 3d 3d   V I N G.;;=====
3f10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3f20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3f30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3f40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3f50: 3d 0a 0a 28 64 65 66 69 6e 65 20 28 74 65 73 74  =..(define (test
3f60: 3a 61 72 63 68 69 76 65 20 64 62 20 74 65 73 74  :archive db test
3f70: 2d 69 64 29 0a 20 20 23 66 29 0a 0a 28 64 65 66  -id).  #f)..(def
3f80: 69 6e 65 20 28 74 65 73 74 3a 61 72 63 68 69 76  ine (test:archiv
3f90: 65 2d 74 65 73 74 73 20 64 62 20 6b 65 79 6e 61  e-tests db keyna
3fa0: 6d 65 73 20 74 61 72 67 65 74 29 0a 20 20 23 66  mes target).  #f
3fb0: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  )..;;===========
3fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3fd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3fe0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3ff0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 52  ===========.;; R
4000: 20 50 20 43 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d   P C.;;=========
4010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28  =============..(
4050: 64 65 66 69 6e 65 20 28 72 74 65 73 74 73 3a 72  define (rtests:r
4060: 65 67 69 73 74 65 72 2d 74 65 73 74 20 64 62 20  egister-test db 
4070: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65  run-id test-name
4080: 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 28 69   item-path).  (i
4090: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20  f *runremote*.  
40a0: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20      (let ((host 
40b0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e  (vector-ref *run
40c0: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20  remote* 0))..   
40d0: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72   (port (vector-r
40e0: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31  ef *runremote* 1
40f0: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65  )))..((rpc:proce
4100: 64 75 72 65 20 27 72 74 65 73 74 73 3a 72 65 67  dure 'rtests:reg
4110: 69 73 74 65 72 2d 74 65 73 74 20 68 6f 73 74 20  ister-test host 
4120: 70 6f 72 74 29 20 72 75 6e 2d 69 64 20 74 65 73  port) run-id tes
4130: 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68  t-name item-path
4140: 29 29 0a 20 20 20 20 20 20 28 74 65 73 74 73 3a  )).      (tests:
4150: 72 65 67 69 73 74 65 72 2d 74 65 73 74 20 64 62  register-test db
4160: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d   run-id test-nam
4170: 65 20 69 74 65 6d 2d 70 61 74 68 29 29 29 0a 0a  e item-path)))..
4180: 28 64 65 66 69 6e 65 20 28 72 74 65 73 74 73 3a  (define (rtests:
4190: 74 65 73 74 2d 73 65 74 2d 73 74 61 74 75 73 21  test-set-status!
41a0: 20 20 64 62 20 74 65 73 74 2d 69 64 20 73 74 61    db test-id sta
41b0: 74 65 20 73 74 61 74 75 73 20 63 6f 6d 6d 65 6e  te status commen
41c0: 74 20 64 61 74 29 0a 20 20 28 69 66 20 2a 72 75  t dat).  (if *ru
41d0: 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28  nremote*.      (
41e0: 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74  let ((host (vect
41f0: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74  or-ref *runremot
4200: 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72  e* 0))..    (por
4210: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72  t (vector-ref *r
4220: 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09  unremote* 1)))..
4230: 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20  ((rpc:procedure 
4240: 27 72 74 65 73 74 73 3a 74 65 73 74 2d 73 65 74  'rtests:test-set
4250: 2d 73 74 61 74 75 73 21 20 68 6f 73 74 20 70 6f  -status! host po
4260: 72 74 29 20 74 65 73 74 2d 69 64 20 73 74 61 74  rt) test-id stat
4270: 65 20 73 74 61 74 75 73 20 63 6f 6d 6d 65 6e 74  e status comment
4280: 20 64 61 74 29 29 0a 20 20 20 20 20 20 28 74 65   dat)).      (te
4290: 73 74 2d 73 65 74 2d 73 74 61 74 75 73 21 20 64  st-set-status! d
42a0: 62 20 74 65 73 74 2d 69 64 20 73 74 61 74 65 20  b test-id state 
42b0: 73 74 61 74 75 73 20 63 6f 6d 6d 65 6e 74 20 64  status comment d
42c0: 61 74 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28  at)))..(define (
42d0: 72 74 65 73 74 73 3a 74 65 73 74 2d 73 65 74 2d  rtests:test-set-
42e0: 74 6f 70 6c 6f 67 21 20 64 62 20 72 75 6e 2d 69  toplog! db run-i
42f0: 64 20 74 65 73 74 2d 6e 61 6d 65 20 6c 6f 67 66  d test-name logf
4300: 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f  ).  (if *runremo
4310: 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28  te*.      (let (
4320: 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65  (host (vector-re
4330: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29  f *runremote* 0)
4340: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70  ).            (p
4350: 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20  ort (vector-ref 
4360: 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29  *runremote* 1)))
4370: 0a 20 20 20 20 20 20 20 20 28 28 72 70 63 3a 70  .        ((rpc:p
4380: 72 6f 63 65 64 75 72 65 20 27 72 74 65 73 74 73  rocedure 'rtests
4390: 3a 74 65 73 74 2d 73 65 74 2d 74 6f 70 6c 6f 67  :test-set-toplog
43a0: 21 20 68 6f 73 74 20 70 6f 72 74 29 20 72 75 6e  ! host port) run
43b0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 6c 6f  -id test-name lo
43c0: 67 66 29 29 0a 20 20 20 20 20 20 28 74 65 73 74  gf)).      (test
43d0: 2d 73 65 74 2d 74 6f 70 6c 6f 67 21 20 64 62 20  -set-toplog! db 
43e0: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65  run-id test-name
43f0: 20 6c 6f 67 66 29 29 29 0a 0a 0a                  logf)))...